quarta-feira, 8 de junho de 2016

Wx - Trabalhando com DLL de Terceiros

Wx - Trabalhando com DLL de Terceiros

http://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/621-trabalhando-com-dll-terceiros/read.awp 


http://help.windev.com/en-US/?3014006&name=LoadDLL
http://help.windev.com/en-US/?3014003&name=CallDLL32
http://help.windev.com/en-US/?3014009&name=FreeDLL




//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






Posté le 17 septembre 2015 - 17:16

Principal noção:

A) Carrega uma Dll na memória com LoadDLL (Function)

http://help.windev.com/en-US/?3014006&name=LoadDLL

<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



B) Executa um metodo interno de uma DLL com CallDLL32 (Function)

http://help.windev.com/en-US/?3014003&name=CallDLL32

<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/?3014009&name=FreeDLL

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





Posté le 17 septembre 2015 - 17:21
Outros links:

Selecting_the_libraries // Selecionando As Bibliotecas
http://help.windev.com/en-US/?3515004&name=Selecting_the_libraries
http://help.windev.com/en-US/?2025009&name=Standalone_executable
http://help.windev.com/en-US/?2025002

*
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.
Retorna a lista de bibliotecas (arquivos ".dll") utilizados por um dos aplicativos em execução. Esta aplicação pode corresponder a uma aplicação WINDEV, uma aplicação WINDEV móvel ou outra aplicação.
http://help.windev.com/en-US/?3035009&name=ExeListDLL


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.
A lista de bibliotecas (arquivos ".dll") utilizados pelo WINDEV atual ou WINDEV aplicação móvel ou pelo site WebDev atual. Somente as bibliotecas carregadas na memória são listados.

http://help.windev.com/en-US/?3064006&name=ListDLL


API do Windows
http://help.windev.com/en-US/?3014005&name=API
e
http://help.windev.com/en-US/?1000019149&name=API_description
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/?2425&name=ERR_NO_DLLEXE
Unable to load the <DLL_NAME> DLL. ERR_NO_DLLEXE (34)
http://help.windev.com/en-US/?2526&name=ERR_BAD_DLLEXE
The <DLL_NAME> DLL is not compatible with this version of WEBDEV. ERR_BAD_DLLEXE

--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
______________________________________________
















Nenhum comentário:

Postar um comentário

Teste

Teste
teste