Histórico da Página
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 | ||
---|---|---|
| ||
extern "C" int __declspec(dllexport) ExecInClientDLL(int idCommand, char * buffParam, char * buffOutput, int buffLen);
|
Sintaxe
Bloco de código | ||
---|---|---|
| ||
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 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
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 | ||||
---|---|---|---|---|
| ||||
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. |
...
language | cpp |
---|---|
theme | Eclipse |
linenumbers | true |
collapse | false |
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
Veja também
...