TLPP - LANGUAGE
- CallMethod(cMethodName, cSignature, xRet, xParameters)
- objetivo: chamar um método de uma uma DLL escrita em C++.
- cMethodName: o protótipo completo do método que será chamado, incluindo nome da classe, nome do método e parâmetros (case-sensitive). Visite a seção DynCall - Protótipo C++.
- cSignature: a assinatura do método (retorno e parâmetros). Veja a seção DynCall - Assinatura da chamada, que fala sobre assinaturas de funções e métodos.
- xRet: uma variável para guardar o retorno do método. Se for método void, passe Nil.
- xParameters: a lista de parâmetros do método chamado. Se o método não possuir parâmetros, essa lista só precisa conter o objeto do método a ser invocado.
- retorno: lógico
- .T. execução com sucesso
- .F. execução com erro
O seguinte exemplo coloca lado a lado um código de uma biblioteca escrita em C++ e o código TLPP que carrega e executa o método add exportado pela classe tArith.
Do lado TLPP, observe que quando formos chamar um método de instância, como, por exemplo, o add, o primeiro parâmetro deve ser sempre o this do objeto. Nesse caso, ele é dado pela abstração mantida na variável oObj. Conforme convencionado, o this é um ponteiro e é legendado pela letra 'P'.
Exemplo: lado da biblioteca #include <stdio.h>
#include <stdlib.h>
#define EXPORT __declspec(dllexport)
class EXPORT tArith
{
public:
tArith();
tArith* factory();
int add(int a, int b);
};
tArith::tArith()
{
}
tArith* tArith::factory()
{
tArith* p;
p = new tArith();
return p;
}
int tArith::add(int a, int b)
{
return a + b;
}
| Exemplo: lado TLPP #include "tlpp-core.th"
Function U_DynCall()
Local oDll as Object // objeto de carga da dll
Local nValue as Numeric // guardar o retorno do método add
Local oObj as Object // abstração para uma instância de tArith da dll
If (IsSrvUnix())
oDll := tRunDll():New("dllcpp.so")
Else
oDll := tRunDll():New("dllcpp.dll")
EndIf
// criar uma abstração para algum objeto da dll
oObj := oDll:NewObj()
// o tArith::factory vai nos retornar um endereço que se vincula à abstração oObj
oDll:CallMethod("tArith::factory()", "P", oObj)
// agora a gente pode chamar o método add
oDll:CallMethod("tArith::add(int, int)", "IPII", nValue, oObj, 11, 14)
// terminou? vamos sanitizar o uso da dll
oDll:Free()
// espera-se o valor 25
Conout(nValue)
Return
|
Import HTML Content
Visão Geral
Conteúdo das Ferramentas