Página 1 de 1

Criação de DLL

Enviado: 26 Jul 2010 10:06
por DLZ
Bom dia.
Uso Xharbour com Hbmake e vi que tem uma opção de gerar uma DLL ao invés de criar o executável..
Pergunta:
é possível criar programas em Xharbour, criar a DLL e usar as funções no Delphhi, por exemplo ?
Se é possível, como fazer isso ?

Re: Criação de DLL

Enviado: 27 Jul 2010 08:47
por rochinha
Amiguinho,

Quanto a utilização, é possivel desde que a DLL tenha sido planejada para fins de compartilhamento dos recursos, voce poderá acessá-la diretamente carregando-a na memória e fazendo chamadas CallDLL() ou linkando a mesma em seu aplicativo e usando wrappers para chamadas.

Veja um exemplo de chamada a funções de uma .DLL:

Código: Selecionar todos

#include "windows.ch"
#include "guilib.ch"
#include "hbdll.ch"

//#define DC_CALL_STD            0x0020      // __stdcall

*---------------------------------------------------------------------------------------
Function Main
*---------------------------------------------------------------------------------------
Local Form_Main
Local oFontBtn
Local oFont := Nil
Local nColor
local file0:=""
local hdll

Public oDir := "\"+Curdir()+"\DADOS\"
hdll:=loadlibrary("EZTW32.DLL")

SET DELETE ON
SET DATE BRIT

   PREPARE FONT oFontBtn NAME "MS Sans Serif" WIDTH 0 HEIGHT -12

   INIT WINDOW Form_Main MAIN TITLE "Sygecom"

   MENU OF Form_Main
      MENU TITLE "&Exemplos de"
         MENUITEM "&Demo de Cadastro"        ACTION MsgInfo(HWG_Version(1))
         SEPARATOR
         MENUITEM "&Sair"                    ACTION EndWindow()
      ENDMENU

       MENU TITLE "&Ajuda"
         MENUITEM "&Sobre" ACTION MsgInfo(HWG_Version(1))
      ENDMENU
   ENDMENU

   dllcall(hdll,DC_CALL_STD,"TWAIN_AcquireToFilename",Form_Main:handle,file0)
   freelibrary(hdll)

   Form_Main:Activate()

return nil
As funções Loadlibrary()/freelibrary() fazem parte das bibliotecas do Borland.

Voce pode usar Loadlibrary() para carregar na memória DLLs contendo recursos como imagens e telas(caso use alguma GUI Grafica padrão Windows).

Agora quanto a criação de DLL de funções já não posso te ajudar pois não fui feliz criando nenhuma, mas existe também esta possibilidade.

Re: Criação de DLL

Enviado: 27 Jul 2010 11:03
por DLZ
Bom dia..
Usar Dlls no Xharbour, já uso várias hj.. isso sim funciona..
Minha dúvida é qto a criar DLLs no Xharbour e usar em outras linguagens.. eu até consegui fazer, mas qdo vou chamar uma função da DLL no Delphi da erro de acesso a HARBOUR.DLL.
Estou achando que esse recurso não funciona !

Re: Criação de DLL

Enviado: 29 Jul 2010 01:51
por rochinha
Amiguinho,

Desculpe-me pela falta de visão da palavrinha no na sua sentença.

Realmente, que é do meu conhecimento geralmente usamos, DLLs e OCXs no mundo Harbour, vindas do Delphi, Visual Basic, etc.

E por que fazemos isto? Para suprir a falta de algum recurso disponivel para estas linguagens de alto-nivel em nossas aplicação no mundo Harbour. Lógico que alto-nivel se refere financeiramente as linguagens, visto que Harbour não é concorrente comercial mas possui tantos ou mais recursos destas linguagens.

O contrario, uso de DLL com recursos Harbour em aplicativos Delphi, Visual Basic, não seria uma boa adaptação.

Mesmo porque a Harbour.DLL foi criada para ter em tempo de execução as bibliotecas do mesmo.

Se voce vai utilizar uma linguagem que não use Harbour, não vá para Delphi ou Visual Basic e sim para ForPRO, pois voce terá pelo menos 99% de compatibilidade de comandos e recursos.

Quando eu faço uma integração entre Harbour e Delphi/Visual Basic, eu estou colocando estes ultimos em segundo plano de meu projeto, tornando-os meros coadjuvantes de meu aplicativo.

Caso seu desejo seja usar sintaxe xBase no Delphi, aqui mesmo no forum tem contribuição de comandos xBase para Delphi.

Resumindo não conheço casos de uso da Harbour.dll em aplicativos Delphi ou Visual Basic, chegando a conclusão que não é possivel.

Segundo Ron Pinkas voce deveria adquirir a OleServer.lib em http://www.xHarbour.com para usar com sua DLL de forma que as funções das mesmas se tornassem publicas para outros tipos de lignuagens.