Olá boa tarde aos amigos estou com uma dificuldade com relação a esse comando
aRetorno := DLLCALL(xdll_sat,32,"aCFeVender_SAT_Daruma",cString) eu uso assim no xHarbour
um amigo que usa o fivewim usa da seguinte forma
DLL32 aCFeVender_SAT_Daruma somente um exemplo dos comandos acontece que da forma que estou chamando
DLLCALL tenho um erro de kernel32
e no dele não acontece isso, queria saber se preciso fazer alguma alteração para o xharbour compilar da forma que ele usa no fivewin ou se tem outra maneira compatival para não ter mais o erro kernell32
obrigado atodos..
aRetorno := DLLCALL()
Moderador: Moderadores
-
JOSE CAMARA
- Usuário Nível 1

- Mensagens: 15
- Registrado em: 30 Abr 2014 01:39
- Localização: SAO PAULOS
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
aRetorno := DLLCALL()
Não sei como isso é no xHarbour.
De qualquer forma, tem um detalhe importantíssimo nas chamadas de DLL:
Variáveis ou ponteiros, e tamanho de strings
Se a função da DLL recebe um valor, passa a variável direto
Se a função da DLL usa "ponteiro", passa a variável por referência
Se a função da DLL vai modificar uma variável por referência que é string, é necessário reservar o tamanho adequado.
Aqui eu uso Harbour. Veja um exemplo:
O tamanho máximo que a função pode retornar é 255, então preciso deixar a variável com esse tamanho.
Por exemplo, numa DLL que mexa com XML de nota fiscal eletrônica, pode ser necessário criar uma variável de 50KB, só pra não acontecer esse tipo de erro.
Se não fizer isso, quando a rotina for guardar uma string que não cabe, vai invadir a área de outra rotina, e é justamente aonde acontece o GPF.
Só lembrando:
Usar DLL no Harbour não significa que dá pra usar igual função do Harbour.
Geralmente a DLL é em outra linguagem de programação, e ela não segue as regras do Harbour.
Com certeza tem que tomar cuidado com os parâmetros, porque vai ter que respeitar as regras das duas linguagens de programação de uma vez.
O GPF é a forma que o Windows tem, pra bloquear seu aplicativo, e evitar que ele cause problemas aos demais aplicativos ou até ao próprio Windows, geralmente por causa dessa "invasão de memória".
De qualquer forma, tem um detalhe importantíssimo nas chamadas de DLL:
Variáveis ou ponteiros, e tamanho de strings
Se a função da DLL recebe um valor, passa a variável direto
Se a função da DLL usa "ponteiro", passa a variável por referência
Se a função da DLL vai modificar uma variável por referência que é string, é necessário reservar o tamanho adequado.
Aqui eu uso Harbour. Veja um exemplo:
Código: Selecionar todos
FUNCTION mywin_GetComputerName()
LOCAL cComputerName := Space(255), nSize := 250
CallDll( "GetComputerNameA", "kernel32.dll", @cComputerName, @nSize )
cComputerName := TrimStringApi( cComputerName )
RETURN AllTrim( cComputerName )
Por exemplo, numa DLL que mexa com XML de nota fiscal eletrônica, pode ser necessário criar uma variável de 50KB, só pra não acontecer esse tipo de erro.
Se não fizer isso, quando a rotina for guardar uma string que não cabe, vai invadir a área de outra rotina, e é justamente aonde acontece o GPF.
Só lembrando:
Usar DLL no Harbour não significa que dá pra usar igual função do Harbour.
Geralmente a DLL é em outra linguagem de programação, e ela não segue as regras do Harbour.
Com certeza tem que tomar cuidado com os parâmetros, porque vai ter que respeitar as regras das duas linguagens de programação de uma vez.
O GPF é a forma que o Windows tem, pra bloquear seu aplicativo, e evitar que ele cause problemas aos demais aplicativos ou até ao próprio Windows, geralmente por causa dessa "invasão de memória".
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
JOSE CAMARA
- Usuário Nível 1

- Mensagens: 15
- Registrado em: 30 Abr 2014 01:39
- Localização: SAO PAULOS