TLPP - LANGUAGE
- NewObj(nBytes)
- objetivo: criar uma área de dados opaca para armazenar uma instância de um objeto da DLL. Esse método deve ser chamado imediatamente antes de invocarmos o construtor de um objeto.
- nBytes: o sizeof desse objeto (é opcional).
- Retorno:
- um objeto opaco que referencia um endereço na DLL.
- este retorno é do tipo object em TLPP.
Considerando o lado esquerdo do seguinte exemplo, uma aplicação poderia obter um objeto tArith de duas formas: pelo factory ou realizando um "new tArith()".
Em TLPP, as duas formas são possíveis com DynCall.
No primeiro caso, é criada uma abstração simples, indicando tão e somente que será associado um objeto de DLL em uma chamada posterior.
O endereço do objeto é fornecido por alguma função ou método estático da DLL, como o factory, no exemplo.
No segundo, a aplicação TLPP vai fazer o "new tArith()" e, portanto, precisará indicar um tamanho explícito que comporte suficientemente um objeto tArith.
Em seguida, ela chama o construtor da DLL.
Exemplo: lado da biblioteca #include <stdio.h>
#include <stdlib.h>
#define EXPORT __declspec(dllexport)
class EXPORT tArith
{
public:
tArith();
tArith* factory();
};
tArith::tArith()
{
}
tArith* tArith::factory()
{
tArith* p;
p = new tArith();
return p;
}
| Exemplo: lado TLPP #include "tlpp-core.th"
Function U_DynCall()
Local oDll as Object // objeto de carga da dll
Local oObjCase1 as Object // abstração para instância tArith
Local oObjCase2 as Object // outra abstração tArith
Local nSizeOfArith := 64 as Numeric // um tamanho que caiba um tArith
If (IsSrvUnix())
oDll := tRunDll():New("./dllcpp.so")
Else
oDll := tRunDll():New("dllcpp.dll")
EndIf
// caso 1: TLPP não aloca, só recebe um objeto pronto
oObjCase1 := oDll:NewObj()
oDll:CallMethod("tArith::factory()", "P", oObjCase1)
// caso 2: TLPP vai alocar um espaço de memória e depois chamar o construtor
oObjCase2 := oDll:NewObj(nSizeOfArith) // tamanho em bytes a alocar
oDll:CallMethod("tArith::tArith()", "VP", nil, oObjCase2)
// terminou? vamos sanitizar o uso da dll
oDll:FreeObj(oObjCase1)
oDll:FreeObj(oObjCase2)
oDll:Free()
Return
|
Import HTML Content
Visão Geral
Conteúdo das Ferramentas