Criação de DLL

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

Moderador: Moderadores

DLZ
Usuário Nível 3
Usuário Nível 3
Mensagens: 184
Registrado em: 09 Jun 2008 10:09
Localização: Ibirubá - RS - Brasil

Criação de DLL

Mensagem 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 ?
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Criação de DLL

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
DLZ
Usuário Nível 3
Usuário Nível 3
Mensagens: 184
Registrado em: 09 Jun 2008 10:09
Localização: Ibirubá - RS - Brasil

Re: Criação de DLL

Mensagem 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 !
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: Criação de DLL

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder