Histórico da Página
Estado | ||||||
---|---|---|---|---|---|---|
|
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++.
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
double Add(double x, double y)
{
return x + y;
} |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
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++.
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
// 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) |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas