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