Home

Tecnologia TOTVS

Páginas filhas
  • ExecInDLLRun
Ir para o final dos metadados
Ir para o início dos metadados

Invalid License

Your license for maintenance of Composition is not valid for this version. Please use the Renew button to renew your Composition license.

Executa uma função pré-definida de uma DLL (Dynamic-link library , ou Biblioteca de vinculo dinâmica), previamente carregada no TOTVS|SmartClient através da função ExecInDLLOpen()

Sintaxe

cRet := ExecInDllRun( < nHandle >, < nOpc >, < cStrInput > )

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

Informa um parâmetro numérico inteiro para a função pré-definida na DLL.

X

 

cStrInput

caractere

Informa uma string, limitado a 255 bytes, que será recebida pela DLL como um ponteiro de caracteres ou char * . Caso seja necessário informar um parâmetro maior, utilize a função ExeDLLRun2.

X

 

Exemplo (DLL)

 

// Fonte de exemplo c++ 
// Deve ser compilado gerando uma DLL 32 bits, chamada "tstdll.dll"
// para ser usada no exemplo em AdvPL. Esta DLL deve ser copiada para a pasta do SmartClient.EXE
 
 
extern "C" __declspec(dllexport) void ExecInClientDLL( int nOPC, char * cStrInput, char * cStrReturn, int nRetMaxSize )
{
 
  // nOPC e cStrInput recebem respectivamente o número e a string informadas 
  // como parâmetro na chamada da ExecInDLLRun() do AdvPL, e podem escrever
  // uma string de retorno no buffer cStrReturn. 
 
  if( nOpc == 1 )
  {
    strcpy(cStrReturn,"Retorno 01");
  }
  else if ( nOpc == 2 )
  {
    strcpy(cStrReturn,"Retorno 02");
  }
}

Observações

  • A função executada dentro da DLL pode escrever um retorno em string, no buffer cStrReturn, de até 255 bytes. Caso seja necessário um retorno maior, utilize a função ExeDLLRun2.
  • Para o nome da função na DLL, é obrigatorio utilizar ExecInClientDLL, com a declaração/assinatura abaixo especificada, para o correto funcionamento da implementação.

 

Atenção

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

Quando a função ExecInClientDLL é chamada através da função AdvPL ExecInDLLRun(), o buffer de retorno suporta apenas 255 bytes. Caso seja necessário um retorno maior, utilize a função ExeDLLRun2()

Exemplo (AdvPL)


 

User Function Exemplo()

Local hHdl := 0, cParm := "", cRet 

// Abre a DLL para utilização 
hHdl := ExecInDLLOpen( "TSTDLL.DLL" )

// Nesta chamada, a função ExecInClientDLL (dentro da DLL) receberá 1 em nOpc, e a string "Teste 1" em cStrInput.
// Será retornado na variável AdvPL cRet o conteúdo "Retorno 01", escrito pela DLL no buffer de retorno cStrReturn
cParm := "Teste 1"
nOpc := 1
cRet  := ExecInDllRun( hHdl, nOpc, cParm )

// Mostra o retorno da chamada da DLL 
alert("Retorno da ExecInDllRun: " + cRet)

// fecha a DLL 
ExecInDllClose( hHdl )

Return

Veja também

  • Sem rótulos