TLPP - LANGUAGE
O consumo do DynCall estabelece uma legenda própria para definição do tipo de retorno e parâmetros de uma chamada de função ou método de uma DLL.
As chamadas CallFunction, CallMethod, GetVar e SetVar (veja DynCall - Acesso às funções) necessitam de informação a respeito dos tipos C ou C++ envolvidos.
Dessa forma, ficou convencionado adotar na assinatura da chamada uma letra corresponde a cada um dos tipos envolvidos, conforme o seguinte quadro.
Importante ressaltar que essa legenda não corresponde à legenda de tipos de TLPP.
É uma legenda particular do DynCall e se relaciona aos tipos baixo nível de C/C++.
Observe que a legenda é case-sensitive. Por exemplo, há a letra "C" para char e "c" para unsigned char.
legenda | tipo C/C++ |
V | void |
B | bool |
C | char |
c | unsigned char |
S | short |
s | unsigned short |
I | int |
i | unsigned int |
L | long |
l | unsigned long |
G | long long |
g | unsigned long long |
F | float |
D | double |
P | void * |
A | char * |
T | size_t |
A fim de exemplificar o modelo, podemos considerar duas funções em C.
double doCalc(int x, float y); void printData(short a, unsigned short b, float c, unsigned long long d, char *e);
Ao invocar essa função C, podemos montar da seguinte maneira a assinatura de chamada
Local nRet, nX, nY, nW as NumericLocal cSignature, cValue as Character //..... (um trecho oculto) // assinatura para chamar doCalc cSignature := "DIF" oDll:CallFunction("doCalc", cSignature, nRet, nX, nY) // assinatura para chamar printData cSignature := "VSsFgA" oDll:CallFunction("printData", cSignature, Nil, nX, nY, nZ, nW, cValue)