Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Composition Setup
import.css=/download/attachments/6062824/tecnologia.css

...

Executa funções ou procedures de uma DLL (Dynamic-link library , ou Biblioteca de vinculo dinâmica).

A biblioteca a ser utilizada deve obrigatoriamente conter uma função chamada ExecInClientDLL e com a seguinte assinatura :

Bloco de código
collapsefalse
extern "C" int __declspec(dllexport) ExecInClientDLL(int idCommand, char * buffParam, char * buffOutput, int buffLen);

Sintaxe

Bloco de código
collapsefalse
ExeDLLRun2( < nHandle >, < nOpc >, < cBuffer > )

Parâmetros

...

Nome

...

Tipo

...

Descrição

...

Obrigatório

...

Referência

...

nHandle

...

caractere

...

Indica o handle da DLL obtida através da função ExecInDLLOpen().

...

X

...

nOpc

...

numérico

...

Indica a opção que será executada pela DLL.

...

X

...

cBuffer

...

caractere

...

Indica o buffer, no formato caracter, que será recebido pela DLL. 

Esse buffer será utilizado tanto para input de dados na DLL quanto para output da mesma.

...

X

Observações

  • A variável cBuffer tem limite de 512.000 caracteres, para ser passada como referencia.

Exemplos

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
extern "C" __declspec(dllexport) void ExecInClientDLL(int ID, char * Buf, char * Buf2, int nBuf2)
{
  if(ID==1)
  {
    strcpy(Buf2,"Retorno opção 01");
  }
  else if (ID == 2)
  {
    strcpy(Buf2, "Retorno opção 02");
  }
}
Nota
icontrue
titleAtenção

Como pode ser observado, a dll desenvolvida para ser executada com a função ExeDLLRun2 tem uma assinatura diferente da utilizada em ExeDLLRun3, por isso não são compativeis e podem causar erros fatais na execução.

...

languagecpp
themeEclipse
linenumberstrue
collapsefalse

User

...

Function

...

DllTeste()

...



Local

...

hHdl

...

:=

...

0,buffer

...

:=

...

"",xRet1

...

:=

...

0

...


//

...

Abre

...

Dll

...


hHdl

...

:=

...

ExecInDLLOpen(

...

"

...

DllTeste.

...

dll"

...

)

...



//

...

----------------------------------------------------------------

...


//

...

Envia

...

comando

...

para

...

execução,

...

repare

...

que

...

estamos

...


//

...

usando

...

a

...

opção

...

"1"

...

no

...

momento

...

de

...

chamar

...

a

...

DLL.

...


//

...

----------------------------------------------------------------

...



//

...

ExecInDllRun

...

não

...

retorna

...

valor

...

da

...

DLL

...


buffer:=

...

"Executando

...

a

...

partir

...

da

...

ExecInDllRun..."

...


xRet1

...

:=

...

ExeDllRun2(

...

hHdl,

...

1,

...

@buffer

...

)

...


alert("Retorno

...

da

...

ExeDllRun2:

...

"

...

+

...

Alltrim(Str(xRet1)) + " - " + buffer)


// ExeDllRun2 retorna valor numérico da DLL
buffer:= "Executando a partir da ExeDllRun2..."

...


xRet2 :=

...

ExeDllRun2(

...

hHdl,

...

2,

...

@buffer

...

)

...


alert("Retorno

...

da

...

ExeDllRun2:

...

"

...

+

...

Alltrim(Str(xRet2)) + " - " + buffer)

// ----------------------------------------------------------------

...


//

...

Fecha

...

a

...

DLL

...


ExecInDllClose(

...

hHdl

...

)

...



Return

Preview

Image Removed

Veja também

...