Funcao hb_dyncall(....)

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

jjuliofcampos
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 25 Mai 2017 20:01
Localização: jundiai/sp

Funcao hb_dyncall(....)

Mensagem por jjuliofcampos »

Quais sao os parametros para essa funcao?
Como devo fazer para executar a funcao "envcomm(cSTRING) da dll pertochekser.dll que devera retornar TRUE ou FALSE.

TDLL:=hb_libLoad("PertoChekSer.dll" )
RET:=hb_dynCall({"EnvComm",TDLL,HB_DYN_CALLCONV_STDCALL },cCom)
Neste exemplo em meu prg está retornando variavel numerica, -2000 em vez de .t. ou .f.



jjulio
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funcao hb_dyncall(....)

Mensagem por JoséQuintas »

Ao que parece, está fazendo errado.
Só pesquisar exemplos no Harbour.
dyncall.png
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/
jjuliofcampos
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 25 Mai 2017 20:01
Localização: jundiai/sp

Funcao hb_dyncall(....)

Mensagem por jjuliofcampos »

Realmente não estou sabendo quais parâmetros usar para obter o retorno da função EnvComm que será executada pelo hb_dyncall(...) que deveria ser FALSE ou TRUE.
RET:=hb_dynCall({"EnvComm",TDLL,HB_DYN_CALLCONV_STDCALL },cCom)
A variavel REC recebera a informação de que a função hb_dyncall(..) foi executada sem erro ou não ;
O resultado da função EnvComm executada dentro do hb_dyncall () devera ser .t. ou .f.
Suponho que deva passar um parametro informando a variavel que vai receber esse retorno.
Não sei se estou sendo claro mas, resumindo, preciso receber o retorno da função EnvComm, isto é, FALSE ou TRUE.


jjulio
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funcao hb_dyncall(....)

Mensagem por JoséQuintas »

Desculpe, eu me confundi com o array, e achei que sua sintaxe estava errada.
À primeira vista, está tudo certo quanto ao modo de usar.

Por acaso esse -2000 não pode se referir a algum código de erro?

O parâmetro é caractere ou é pointer de caractere?
Se for pointer de caractere, é @cCom ao invés de cCom.
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/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Funcao hb_dyncall(....)

Mensagem por Jairo Maia »

Olá Pessoal,
jjuliofcampos escreveu:O resultado da função EnvComm executada dentro do hb_dyncall () devera ser .t. ou .f.
O retorno da hb_dynCall() sempre será numérico, nunca lógico. O problema é realmente encontrar documentação dessa função. Não se acha nem nos grupos do Harbour.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
jjuliofcampos
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 25 Mai 2017 20:01
Localização: jundiai/sp

Funcao hb_dyncall(....)

Mensagem por jjuliofcampos »

O parametro que estou passando é uma string "$4000000001234500"
Creio que preciso acrescentar um parametro para receber uma variavel logica como resposta da funcao EnvComm...
-2000 deve ser erro na execução do hb_dyncall....
Essa dll que estou testando pede uma impressora serial em COM1:; Acho que devo fazer o teste com uma DLL mais simples, sem envolver meios fisicos, e que deva retornar um variavel logica.
Alguma sugestao de DLL?


jjulio
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funcao hb_dyncall(....)

Mensagem por JoséQuintas »

O retorno da hb_dynCall() sempre será numérico, nunca lógico. O problema é realmente encontrar documentação dessa função. Não se acha nem nos grupos do Harbour.
O retorno depende da DLL, e geralmente é um tipo em C que é convertido pra Harbour.
.T. ou .F. pode ser 0 ou 1, ou algo parecido.

GetParent, que está em user32.dll

Código: Selecionar todos

   hWndParent := hb_DynCall( { "GetParent", "user32.dll", HB_DYN_CALLCONV_STDCALL }, hWnd )
Ela recebe um parâmetro num formato, e devolve outro parâmetro, por coincidência no mesmo formato.

GetModuleFileNameA, em kernel32.dll

Código: Selecionar todos

LOCAL cFileName := Space(100), nSize := 100
hb_DynCall( { "GetModuleFileNameA", "kernel32.dll", HB_DYN_CALLCONV_STDCALL }, , @cFileName, nSize )
Ela recebe o "pointer" da string aonde vai armazenar o nome do EXE.
O pointer é algo como um endereço de memória.
Se não passar como pointer, ou não couber o nome do EXE nesse espaço de variável, é GPF, porque o resultado pode invadir o espaço de outra variável.
Até por isso existe a HBWIN, que tem funções intermediárias pra API do Windows já com algum tpo de conversão, pra evitar GPF.

Isso tudo não é hb_DynCall() que decide, é a função dentro da DLL.
O máximo que pode acontecer, é converter o resultado para algum tipo conhecido pelo Harbour.

Cada função de cada DLL tem suas exigências/parâmetros/retornos, e cabe ao desenvolvedor da DLL apresentar um manual de uso.

Se a função em questão retorna -2000, isso está longe de ser .T. ou .F.
Não precisa manual da hb_DynCall, precisa manual da DLL.
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/
jjuliofcampos
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 25 Mai 2017 20:01
Localização: jundiai/sp

Funcao hb_dyncall(....)

Mensagem por jjuliofcampos »

A funcao que estou tentando executar atraves da hb_dyncall(...) é EnvComm( string ) onde a string é um comando para a impressora nao fiscal executar pela COM1:
O retorno dessa funcao é .t. ou .f. que vai me dizer se a impressora recebeu o comando...
Creio que em hb_dyncall() falta uma variavel como parâmetro para eu poder receber o regtorno de EnvComm()...

jjulio
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funcao hb_dyncall(....)

Mensagem por JoséQuintas »

Se a função tem mais parâmetros, então precisa do manual da DLL pra ver que parâmetro é esse.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funcao hb_dyncall(....)

Mensagem por JoséQuintas »

Fiz uma pesquisa no google.

Achei o kit de desenvolvimento dessa DLL

Tem tudo lá, menos alguma função que retorne .T. ou .F.

Não sei se tem algum manual, mas provavelmente não é dessa DLL.

Só pesquisar no google, ou ir direto no site do fabricante.
.
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/
jjuliofcampos
Usuário Nível 1
Usuário Nível 1
Mensagens: 8
Registrado em: 25 Mai 2017 20:01
Localização: jundiai/sp

Funcao hb_dyncall(....)

Mensagem por jjuliofcampos »

Esta rotina em C é um exemplo de uso das funções de pertoChekser.DLL
IniComm()
EnvComm()
RetComm()
EndComm()
SerialBusy()
Consta no kit de desenvolvimento da PertoChek (PertoChek\A0035K01-KitPertoChek\SERIAL\Win32)


/* Declarações: */
char chCmd[2048], chAnswer[2048];
int nRet;

/*** Inicialização da porta ***/
nRet = IniComm("COM1:4800, N, 8, 1");

if (nRet! = FALSE)
/* A porta foi inicializada com sucesso! */
else
/* Ocorreu um erro na inicialização da porta...*/


/*** Rotina para enviar comandos e receber a resposta da PertoChek ***/
/* Limpa buffer: */
memset(chAnswer, '\0', sizeof(chAnswer));

/* Comando a ser enviado: Preenchimento de cheque */
strcpy(chCmd, “$4000000123456000”);

/* Verifica se a PertoChek não está ocupada. */
if (SerialBusy(5) == FALSE)
{
/* A PertoChek encontra-se ocupada! */
}

/* Transmite o comando: */
nRet = EnvComm(chCmd);

if (nRet != FALSE)
{
/* Recebe resposta da pertochek: */
nRet = RecComm(50, chAnswer);
if (nRet == FALSE)
/* Ocorreu time out: a PertoChek não respondeu ao comando!! */
}
else
{
/* O comando não pode ser enviado. */
/* Erro: O camando não pode ser enviado!! */

return;
}

/*** Finaliza a porta***/
EndComm();
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funcao hb_dyncall(....)

Mensagem por JoséQuintas »

Acho C muito complicado, parece coisa de maluco, prefiro exemplo em VB.
Do mesmo kit de desenvolvimento.
pertochek.png
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funcao hb_dyncall(....)

Mensagem por JoséQuintas »

Esquisito....
Este é o único fonte em C que tem na pasta.
Se entendi, o retorno é sempre numérico.
pertochek2.png

Sei lá de onde veio seu fonte....

De qualquer forma, mostra que falta o SerialBusy() e IniComm2() no VB6.

Eita empresinha ruim de software., exemplo incompleto pra VB.
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funcao hb_dyncall(....)

Mensagem por JoséQuintas »

Baixei daqui.
perto.png
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/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Funcao hb_dyncall(....)

Mensagem por JoséQuintas »

E o único que trata pertochek.dll é este.
Inclusive no download consta o tal A0035K01.
perto2.png
Agora fiquei curioso pra saber de onde veio o seu fonte.
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/
Responder