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:FreeObj(oObj) oDll:Free() // espera-se o valor 25 Conout(nValue) Return |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas