Árvore de páginas

TLPP - LANGUAGE

  • StrCpy(cRet, oPointer, nSize)
    • objetivo: fazer uma cópia de uma cadeia de caracteres da DLL para uma variável em TLPP.
    • cRet: a variável para receber a string.
    • oPointer: um ponteiro para a cadeia de caracteres. Esse ponteiro é uma abstração realizada antes pelo método newPointer (tRunDll:NewPointer).
    • nSize: a quantidade de bytes a serem copiados (recomenda-se utilizar tRunDll:StrLen para obter esse valor). 
    • retorno: lógico
      • .T.  execução com sucesso
      • .F.  execução com erro


Se a aplicação TLPP possui um ponteiro para um buffer da DLL e sabe o tamanho dele, pode-se utilizar a operação StrCpy para fazer uma cópia, conforme exemplo.


Exemplo: 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;
}
Exemplo: 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
  Local cValue as Character  // armazenar uma string que vem 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)
  
  // Obtendo a string
  oDll:StrCpy(cValue, oPtr, nLen)
  Conout(cValue)
  
  // terminou? vamos sanitizar o uso da dll
  oDll:Free()
  
Return
  • Sem rótulos