Usar DLL do Windows

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

Moderador: Moderadores

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

Usar DLL do Windows

Mensagem por JoséQuintas »

Encontrei nas pastas do Harbour um exemplo interessante, mas não consegui compilar.
Dá falta de arquivos.
Gostei da forma fácil de fazer declaração.
O exemplo inteiro é este:

Código: Selecionar todos

#include "hbdll.ch"
IMPORT STATIC MessageBox( hWnd, cMsg, cText, nFlags ) FROM user32.dll EXPORTED AS MessageBoxA
PROCEDURE Main()
   ? MessageBox( 0, "Hello world!", "Harbour sez" )
   RETURN
Tentei pegar a hbdll.ch do cvs, mas dá falta de mais e mais arquivos, e no final não compila.
Achei prática essa forma.
Alguém sabe como fazer funcionar a declaração de funções em 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/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Usar DLL do Windows

Mensagem por Jairo Maia »

Olá José,

Não sei sobre sua dúvida, mas para registro: compilando com xHarbour usando xBuild, deu certo. Mas em Harbour não consegui. Dá erro de sintaxe em STATIC.
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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar DLL do Windows

Mensagem por JoséQuintas »

Gostei do estilo de sintaxe prático, mas complicou pra fazer funcionar.
Acabei fazendo deste jeito no Harbour:

Código: Selecionar todos

#include "hbdyn.ch"
Function WAPI_SetParent( hWndChild, hWnd )
   Local hHandleDll
   hHandleDll := hb_LibLoad("user32.dll")
   hb_DynCall( { "SetParent", hHandleDll, HB_DYN_CALLCONV_STDCALL }, hWndChild, hWnd )
   hb_LibFree( hHandleDll )
Return NIL   
A chamada funcionou.... só o resultado que não foi o que eu esperava.
Minha intenção era deixar a janela chamada em modal, e isso transformou a tela principal em MDI - a tela chamada passou a ficar dentro da principal.
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/
marcosgambeta
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 16 Jun 2005 22:53

Usar DLL do Windows

Mensagem por marcosgambeta »

JoséQuintas escreveu:Encontrei nas pastas do Harbour um exemplo interessante, mas não consegui compilar.
Estes arquivos que você encontrou são da biblioteca xhb. O objetivo básico desta biblioteca é ajudar na transição de sistemas em xharbour que estão passando para harbour.

Mas o ideal é evitar o uso desta biblioteca, deixando ela apenas para o caso citado acima.

A biblioteca hbwin é uma opção melhor, embora você tenha gostado da sintaxe do arquivo hbdll.ch.

Se mesmo assim, quiser usar a biblioteca xhb, basta incluí-la na compilação.
Atenciosamente,
Marcos Antonio Gambeta
Responder