Árvore de páginas

TLPP - LANGUAGE

Ao invocar uma DLL de interface C ou uma DLL de interface C++, o layout de assinatura é muito uniforme com DynCall.


Esse é o layout para uma DLL de interface C


E esse daqui é o layout para uma DLL de interface C++


Observe que ao chamar um método, logo após mencionar o tipo de retorno, obrigatoriamente será preciso também informar o objeto detentor do método.



Para que se possa entender com maior clareza, vamos considerar uma rotina de soma entre dois números de tipo double.
Em seguida, vamos admitir uma implementação em C e outra implementação em C++.

Exemplo: layout C
double Add(double x, double y)
{
  return x + y;
}



Exemplo: layout C++
class tArith
{
  public:
  
  tArith() { }


  double Add(double x, double y)
  {
    return x + y;
  }

  static tArith * factory()
  {
    return new tArith();
  }
};


Agora, vamos considerar que existam dois objetos de execução de DLL instanciados em TLPP.
O primeiro, oDll1, aponta para a DLL C. O segundo, oDll2, aponta para a DLL C++.


Exemplo: assinatura de parâmetros (lado TLPP)
// chamando a função de uma DLL C
oDll1:CallFunction("Add", "DDD", nRet, nX, nY)

// antes de chamar o método Add da Dll2, vamos obter uma instância do objeto tArith.
oPointer := oDll2:newPointer()
oDll2:CallMethod("tArith::factory()", "P", oPointer)

// agora, podemos chamar o método Add
oDll2:CallMethod("tArith::Add(double,double)", "DPDD", nRet, oPointer, nX, nY)
  • Sem rótulos