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
|
Import HTML Content
Visão Geral
Conteúdo das Ferramentas