Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

« Anterior Versão 4 Próxima »

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
  • Sem rótulos