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: 20419
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 2822
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP
Curtiu: 2 vezes

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: 20419
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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