TLPP - LANGUAGE
- MemCpy(cRet, oPointer, nBytes)
- objetivo: fazer uma cópia de memória da DLL para uma variável TLPP. Aqui, a gente consegue fazer cópia de dados binários.
- cRet: a variável que vai receber a cópia.
- oPointer: um ponteiro para a área de dados na DLL. Esse ponteiro é uma abstração realizada antes pelo método newPointer (tRunDll:NewPointer).
- nBytes: a quantidade de bytes a ser copiada.
- retorno: lógico
- .T. execução com sucesso
- .F. execução com erro
Depois que a aplicação TLPP obtém um ponteiro para um buffer da DLL e sabe o tamanho dele, ela pode utilizar a operação MemCpy para fazer uma cópia.
Diferente do tRunDll:StrCpy, que faz cópia de string com terminador '\0', o MemCpy pode copiar um buffer binário, conforme exemplo.
Exemplo: lado da biblioteca #include <stdio.h> #include <stdlib.h> #include <string.h> #define EXPORT __declspec(dllexport) EXPORT void* getBinary(int * nSize) { char* p = (char *) malloc(64); int i = 0; p[i++] = 'T'; p[i++] = 'L'; p[i++] = 'P'; p[i++] = 'P'; p[i++] = '\0'; // um terminador zero no meio p[i++] = 'D'; p[i++] = 'Y'; p[i++] = 'N'; p[i++] = 'C'; p[i++] = 'A'; p[i++] = 'L'; p[i++] = 'L'; p[i++] = '\0'; // um terminador zero no final *nSize = i; 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 tamanho do buffer Local cValue as Character // armazenar um buffer que vem da dll If (IsSrvUnix()) oDll := tRunDll():New("./dllc.so") Else oDll := tRunDll():New("dllc.dll") EndIf // Obtendo o ponteiro do buffer e o seu tamanho oPtr := oDll:NewPointer() oDll:CallFunction("getBinary", "PI", oPtr, @nLen) // Copiando o buffer oDll:MemCpy(cValue, oPtr, nLen) Conout(cValue) // terminou? vamos sanitizar o uso da dll oDll:Free() Return |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas