Adriano - Wx - Trabalhando com DLL de Terceiros - Forum Windev
//OBS.:
//Inicialmente registre por dos comando: regsvr32.exe
//Nao sei se alguem precisa mais ai vai a solução:
//StringRetrieve(retornomemoria , srUNICODEAddress )
//alterei de
//srASCIIZAddress para srUNICODEAddress
//ficou assim:
retornomemoria is int = CallDLL32("spdNfeLib.dll","StatusDoServico",Caminhoini,1)
xmlretorno is string = StringRetrieve ( retornomemoria , srUNICODEAddress )
Info (xmlretorno)
//Sobre o calldll32 retorna somente inteiro ai para ler o retorno string precisei fazer dessa forma:
hInst is int = LoadDLL("nfe.dll")
//hInst = LoadDLL("spdNfeLib.dll")
IF hInst = 0 THEN
Error(ErrorInfo())
ELSE
nAddrASCIIZString is int = CallDLL32("nfe.dll", "VLK_ConsultaStatusWS", Caminhoini,1)
sStringContent is string = StringRetrieve ( nAddrASCIIZString , srASCIIZAddress )
Info(sStringContent)
//sRetorno is string = sString is string CallDLL32("nfe.dll","VLK_ConsultaStatusWS",caminhoini,1)
//CallDLL32("spdNfeLib.dll","StatusDoServico",caminhoini,1)
FreeDLL(hInst)
END
//O stringretrieve que converte de int para string
//Vejamos o seguinte exemplo:
//EM CLARION:
PUBLIC *CLASTRING FastQRCode(*CLASTRING,*CLASTRING)
//Obs.: é com ponteiro
//Não é uma simples string
//é um ponteiro de string
//com endereçamento de memoria
//Voce em que tomar cuidado para não mandar um caminhao entrar numa garagem de um fusca
//ai não da certo, a tipagem de campos algo bem sério para a questão da prototipação de Dlls de terceiros.
//em seu sistema, pois uma vez mal feito vai gerar excessoes, exceptions GPFs em seu sistema.
//A Dll deve ser encaixada corretamente em seu sistema
//A variavel do tipo VARIANT aceita qualquer coisa bem como a BUFFER na maioria dos casos
//Inicialmente registre por dos comando: regsvr32.exe
//Nao sei se alguem precisa mais ai vai a solução:
//StringRetrieve(retornomemoria , srUNICODEAddress )
//alterei de
//srASCIIZAddress para srUNICODEAddress
//ficou assim:
retornomemoria is int = CallDLL32("spdNfeLib.dll","StatusDoServico",Caminhoini,1)
xmlretorno is string = StringRetrieve ( retornomemoria , srUNICODEAddress )
Info (xmlretorno)
//Sobre o calldll32 retorna somente inteiro ai para ler o retorno string precisei fazer dessa forma:
hInst is int = LoadDLL("nfe.dll")
//hInst = LoadDLL("spdNfeLib.dll")
IF hInst = 0 THEN
Error(ErrorInfo())
ELSE
nAddrASCIIZString is int = CallDLL32("nfe.dll", "VLK_ConsultaStatusWS", Caminhoini,1)
sStringContent is string = StringRetrieve ( nAddrASCIIZString , srASCIIZAddress )
Info(sStringContent)
//sRetorno is string = sString is string CallDLL32("nfe.dll","VLK_ConsultaStatusWS",caminhoini,1)
//CallDLL32("spdNfeLib.dll","StatusDoServico",caminhoini,1)
FreeDLL(hInst)
END
//O stringretrieve que converte de int para string
//Vejamos o seguinte exemplo:
//EM CLARION:
PUBLIC *CLASTRING FastQRCode(*CLASTRING,*CLASTRING)
//Obs.: é com ponteiro
//Não é uma simples string
//é um ponteiro de string
//com endereçamento de memoria
//Voce em que tomar cuidado para não mandar um caminhao entrar numa garagem de um fusca
//ai não da certo, a tipagem de campos algo bem sério para a questão da prototipação de Dlls de terceiros.
//em seu sistema, pois uma vez mal feito vai gerar excessoes, exceptions GPFs em seu sistema.
//A Dll deve ser encaixada corretamente em seu sistema
//A variavel do tipo VARIANT aceita qualquer coisa bem como a BUFFER na maioria dos casos
Publicado em setembro, 17 2015 - 5:16 PM
|
A) Carrega uma Dll na memória com LoadDLL (Function)
http://help.windev.com/en-US/…
<Result> = LoadDLL(<DLL Name>)
Ex.:
hInst is int
hInst = LoadDLL("MyDLL.DLL")
IF hInst = 0 THEN
Error(ErrorInfo())
ELSE
Info("DLL loaded")
FreeDLL(hInst)
END
Executa um metodo interno de uma DLL com CallDLL32 (Function)
http://help.windev.com/en-US/…
<Result> = CallDLL32(<DLL Name>, <Function Number> [, <Parameter 1> [, <Parameter 2> [, ... ]]])
Ex.;
CallDLL32("USER32", "SendMessageA", hWnd, wMsg, lParam1, lParam2)
C) Libera uma DLL com FreeDLL (Function)
http://help.windev.com/en-US/…
Ex.:
hInst = LoadDLL("MyDLL.DLL")
IF hInst = 0 THEN
Error("Error during the unload operation")
ELSE
CallDLL32("MyDLL", "FunctionA", par1, par2)
CallDLL32("MyDLL", "FunctionB", par1)
FreeDLL(hInst)
END
Outros links:
Selecting_the_libraries
http://help.windev.com/en-US/…
http://help.windev.com/en-US/…
http://help.windev.com/en-US/…
Returns the list of libraries (".DLL" files) used by one of the applications currently run. This application can correspond to a WinDev application, a WinDev Mobile application or another application.
http://help.windev.com/en-US/…
The list of libraries (".DLL" files) used by the current WinDev or WinDev Mobile application or by the current WebDev site. Only the libraries loaded in memory are listed.
http://help.windev.com/en-US/…
API do Windows
http://help.windev.com/en-US/…
e
http://help.windev.com/en-US/…
Ex.:
API("USER32", "SendMessageA", hWnd, wMsg, lParam1, lParam2)
<Result> = API(<DLL Name> , <Function Name> [, <Parameter 1> [, <Parameter 2> [, ...]]])
Código 34 é um erro de DLL
http://help.windev.com/en-US/…
Unable to load the <DLL_NAME> DLL. ERR_NO_DLLEXE (34)
http://help.windev.com/en-US/…
The <DLL_NAME> DLL is not compatible with this version of WEBDEV. ERR_BAD_DLLEXE
Eu Tinha problema na linguagem(Clarion) em pegar o retorno de uma DLL desenvolvida em Delphi, que retornava o tipo de Variavél "PwideChar()"... Não conseguia pegar de jeito nenhum...
Já com a ferramenta Windev, utilizando os procedimentos acima meus problemas acabaram.. consegui pegar o retorno sem problemas.... Isso irá me ajudar muito no desenvolvimento ...
Para os que tiverem o mesmo problema que tive... vai uma dica ao tentar pegar o Retorno de uma DLL desenvolvida em Delphi cuja varaiável é do tipo PWideChar():
Utilizando a opção "srASCIIZAddress" não funcionou:
xmlretorno is string = StringRetrieve ( retornomemoria , srASCIIZAddress)
AI para funcionar precisei utilizar a opção: "srUNICODEAddress "
xmlretorno is string = StringRetrieve ( retornomemoria , srUNICODEAddress )
Nenhum comentário:
Postar um comentário