Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Estado
subtletrue
colourGreen
titletlpp - 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.


Bloco de código
languagecpp
firstline1
titleExemplo: 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;
}
Bloco de código
languagecpp
firstline1
titleExemplo: 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 10
 
  oDll:Free()
   
Return



Bloco de código
languagecpp
firstline1
titleExemplo: 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;
}
Bloco de código
languagecpp
firstline1
titleExemplo: 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 11

  oDll:Free()
  
Return