Árvore de páginas

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 - Chamadas disponíveis) 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, 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 primeira letra da assinatura corresponde sempre ao tipo de retorno.
Caso hajam parâmetros na função, a assinatura segue com a legenda correspondente a cada um deles, conforme a seguinte ilustração.
A assinatura é sempre uma cadeia de caracteres de tamanho maior ou igual a 1, ou seja, mesmo que a função seja void, a letra 'V' deve ser informada.


A fim de exemplificar o modelo, vamos considerar duas funções de uma hipotética DLL em C.

Exemplo: assinatura de parâmetros (lado C/C++)
double doCalc(int x, float y);
void printData(short a, unsigned short b, float c, unsigned long long d, char *e);


Ao invocar essas duas funções, podemos montar da seguinte maneira a assinatura de chamada

Exemplo: assinatura de parâmetros (lado TLPP)
Local nRet, nX, nY, nW as Numeric
Local 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)
  • Sem rótulos