Clipper On Line • Ver Tópico - Funcao hb_dyncall(....)

Funcao hb_dyncall(....)

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

Moderador: Moderadores

 

Funcao hb_dyncall(....)

Mensagempor jjuliofcampos » 01 Jun 2017 19:17

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
jjuliofcampos
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 8
Data de registro: 25 Mai 2017 20:01
Cidade/Estado: jundiai/sp
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Funcao hb_dyncall(....)

Mensagempor JoséQuintas » 01 Jun 2017 22:52

Ao que parece, está fazendo errado.
Só pesquisar exemplos no Harbour.

dyncall.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Funcao hb_dyncall(....)

Mensagempor jjuliofcampos » 02 Jun 2017 19:41

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
jjuliofcampos
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 8
Data de registro: 25 Mai 2017 20:01
Cidade/Estado: jundiai/sp
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Funcao hb_dyncall(....)

Mensagempor JoséQuintas » 02 Jun 2017 22:13

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Funcao hb_dyncall(....)

Mensagempor Jairo Maia » 03 Jun 2017 08:29

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)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Funcao hb_dyncall(....)

Mensagempor jjuliofcampos » 03 Jun 2017 19:17

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
jjuliofcampos
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 8
Data de registro: 25 Mai 2017 20:01
Cidade/Estado: jundiai/sp
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Funcao hb_dyncall(....)

Mensagempor JoséQuintas » 04 Jun 2017 11:22

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

   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

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Funcao hb_dyncall(....)

Mensagempor jjuliofcampos » 06 Jun 2017 18:41

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
jjuliofcampos
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 8
Data de registro: 25 Mai 2017 20:01
Cidade/Estado: jundiai/sp
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Funcao hb_dyncall(....)

Mensagempor JoséQuintas » 06 Jun 2017 19:19

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Funcao hb_dyncall(....)

Mensagempor JoséQuintas » 06 Jun 2017 20:43

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Funcao hb_dyncall(....)

Mensagempor jjuliofcampos » 07 Jun 2017 16:12

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();
jjuliofcampos
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 8
Data de registro: 25 Mai 2017 20:01
Cidade/Estado: jundiai/sp
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Funcao hb_dyncall(....)

Mensagempor JoséQuintas » 07 Jun 2017 20:46

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Funcao hb_dyncall(....)

Mensagempor JoséQuintas » 07 Jun 2017 21:15

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Funcao hb_dyncall(....)

Mensagempor JoséQuintas » 07 Jun 2017 21:28

Baixei daqui.

perto.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Funcao hb_dyncall(....)

Mensagempor JoséQuintas » 07 Jun 2017 21:36

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, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18158
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro