TLPP - LANGUAGE
- NewPointer()
- objetivo: criar uma abstração para um ponteiro genérico da DLL.
- Retorno:
- um objeto opaco que referencia um endereço na DLL.
- este retorno é do tipo object em TLPP.
Estando do lado TLPP, via operação NewPointer, a aplicação pode manter uma abstração para algum ponteiro do lado da DLL.
De maneira geral, essa amarração se faz por dois passos: cria o objeto de abstração e depois faz uma chamada GetVar, CallFunction ou CallMethod que possa retornar o ponteiro real.
Esse exemplo pode e deve ser complementado com as operações que fazem cópia de buffer, por isso veja também tRunDll:StrCpy e tRunDll:MemCpy.
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
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)
// terminou? vamos sanitizar o uso da dll
oDll:Free()
Return
|
Import HTML Content
Visão Geral
Conteúdo das Ferramentas