Página 1 de 1

Usar DLL do Windows

Enviado: 08 Ago 2012 23:20
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?

Usar DLL do Windows

Enviado: 09 Ago 2012 10:39
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.

Usar DLL do Windows

Enviado: 09 Ago 2012 10:47
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.

Usar DLL do Windows

Enviado: 09 Ago 2012 12:37
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.