Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Estado
subtletrue
colourGreen
titletlpp - language

  • StrLen(nRet, oPointer)
    • objetivo: obter o tamanho de uma cadeia de caracteres que está na DLL.
    • nRet: variável para receber o tamanho da string.
    • oPointer: um ponteiro para a cadeia de caracteres. Esse ponteiro é uma abstração realizada antes pelo método newPointer (tRunDll:NewPointer).
    • retorno: lógico
      • .T.  execução com sucesso
      • .F.  execução com erro



Se TLPP tem possui um ponteiro para uma área de dados da dll e essa área é uma string de terminador '\0', é possível consultar o comprimento da string através da operação StrLen, conforme exemplo.


Bloco de código
languagecpp
firstline1
titleExemplo: lado da biblioteca
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define EXPORT __declspec(dllexport)

EXPORT void* getPtr()
{
  char* p = (char *) malloc(64);
  strcpy_s(p, 64, "Dyncall Test");
  return p;
}
Bloco de código
languagecpp
firstline1
titleExemplo: lado TLPP
#include "tlpp-core.th"

Function U_DynCall()
  Local oDll as Object     // objeto de carga da dll
  Local oPtr as Object     // abstração para um ponteiro da dll
  Local nLen as Numeric    // vai guardar o len de uma string da dll
  
  If (IsSrvUnix())
    oDll := tRunDll():New("dllc.so")
  Else
    oDll := tRunDll():New("dllc.dll")
  EndIf

  // Obtendo o ponteiro
  oPtr := oDll:NewPointer()
  oDll:CallFunction("getPtr", "P", oPtr)       

  // Retornando o StrLen
  oDll:StrLen(nLen, oPtr)       
  Conout(nLen)
  
  // terminou? vamos sanitizar o uso da dll
  oDll:Free()
  
Return