TLPP - LANGUAGE
Ao realizar uma chamada de função ou método de uma biblioteca dinâmica, a passagem de parâmetros pode ser feita tanto por valor quanto por referência.
Do lado da dll, sendo passagem por referência, tipicamente o parâmetro de entrada e saída é sinalizado por um operador de ponteiro '*' ou referência '&'.
Do lado TLPP, se emprega o usual operador '@' na hora de realizar a chamada.
Em seguida, alguns exemplos.
Exemplo: lado da biblioteca - passagem por valor #include <stdio.h> #include <stdlib.h> #define EXPORT __declspec(dllexport) EXPORT int sucessor(int* x) { *x += 1; return *x; } | Exemplo: lado TLPP - passagem por valor #include "tlpp-core.th" Function U_DynCall() Local oDll as Object Local nValue := 10 as Numeric Local nRet := 0 as Numeric If (IsSrvUnix()) oDll := tRunDll():New("dllc.so") Else oDll := tRunDll():New("dllc.dll") EndIf oDll:callFunction("sucessor", "II", nRet, @nValue) Conout(nRet, nValue) // espera-se 11 e 11 oDll:Free() Return |
Exemplo: lado da biblioteca - passagem por referência #include <stdio.h> #include <stdlib.h> #define EXPORT __declspec(dllexport) EXPORT int sucessor(int * x) { *x += 1; return *x; } | Exemplo: lado TLPP - passagem por referência #include "tlpp-core.th" Function U_DynCall() Local oDll as Object Local nValue := 10 as Numeric Local nRet := 0 as Numeric If (IsSrvUnix()) oDll := tRunDll():New("dllc.so") Else oDll := tRunDll():New("dllc.dll") EndIf oDll:callFunction("sucessor", "II", nRet, nValue) Conout(nRet, nValue) // espera-se 11 e 10 oDll:Free() Return |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas