Bom dia,
Boas notícias!!!
Consegui gerar a dll exportável com MinGw.
Testei com rundll32 e um programa de teste feito em harbour.
Essa foi até mais fácil.
DllMinGw.prg -> DllMinGw.dll (o mesmo fonte utilizado para gerar a dll em msvc)
Código: Selecionar todos
**
* Fonte da DLL
**
#include "windows.ch"
#include "hwgui.ch"
#include "common.ch"
#include "guilib.ch"
PROCEDURE MyMethod
hwg_MsgInfo("FUNÇÃO MyMethod com "+HB_Compiler())
RETURN
FUNCTION Beepar()
RETURN Tone( 500 )
#pragma BEGINDUMP
#include <windows.h>
#include <hbvm.h>
#include <hbapiitm.h>
#define DllExport __declspec( dllexport )
#define DllImport __declspec( dllimport )
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
{
HB_SYMBOL_UNUSED( hinstDLL );
HB_SYMBOL_UNUSED( fdwReason );
HB_SYMBOL_UNUSED( lpvReserved );
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
hb_vmInit( FALSE );
break;
case DLL_PROCESS_DETACH:
hb_vmQuit();
break;
}
return TRUE;
}
// http://msdn.microsoft.com/pt-br/library/dt232c9t.aspx
// __declspec(dllexport) void __cdecl Function1(void);
// DllExport void __cdecl Function1(void);
// OLESRV4.DEF
// EXPORTS
// Beepar=_Beepar@0
// A decoração de nome __stdcall prefixa o nome do símbolo com um sublinhado (_) e
// acrescenta o símbolo com um caractere da arroba (@) seguido pelo número de bytes
// na lista de argumentos (o espaço de pilha necessário).
// Como resultado, a função quando declarada como:
// int __stdcall func (int a, double b)
// é decorado como:
// _func@12
// A convenção de chamada do C (__cdecl) decora o nome como _func.
// Para obter o nome decorado, use /MAP. O uso de __declspec(dllexport) faz o seguinte:
// - Se a função for exportada com a convenção de chamada C (_cdecl), ela tira o sublinhado (_) principal quando o nome é exportado.
// - Se a função que está sendo exportada não usa a convenção de chamada C (por exemplo, __stdcall), ela exporta o nome decorado.
// Como não há nenhuma maneira de substituir onde a limpeza de pilha ocorre, você deve usar __stdcall. Para os nomes não
// decorados com __stdcall, você deve especificá-los usando aliases na seção de EXPORTAÇÕES do arquivo .def.
// Isso será mostrado a seguir para a seguinte declaração de função:
// int __stdcall MyFunc (int a, double b);
// void __stdcall InitCode (void);
// No arquivo .DEF:
// EXPORTS
// MYFUNC=_MyFunc@12
// INITCODE=_InitCode@0
// Substituir __declspec(dllexport) void __cdecl Beepar()
// por void pascal __export Beepar()
// __declspec(dllexport) void __cdecl Beepar() ** not work **
//__declspec(dllexport) void __stdcall Beepar()
//void pascal __export Beepar()
//DllExport void pascal Beepar()
DllExport void _cdecl Beepar()
{
hb_itemDoC( "Beepar", 0 );
}
DllExport void _cdecl MyMethod()
{
hb_itemDoC( "MyMethod", 0 );
}
#pragma ENDDUMP
Código: Selecionar todos
@echo off
set path=d:\hb32\bin
set HB_DBG_PATH=.\
set hb_compiler=mingw
hbmk2 dllmingw.hbp -rebuild
pause
Código: Selecionar todos
# ---------------------------------------------------------------------------------
# Script de constru‡Æo da lib HPROC
# ---------------------------------------------------------------------------------
# Autor : Alexandre Simäes
# VersÆo : 1.0
# Data : 09/04/2012
# Harbour : Harbour 3.1.0dev (Rev. 17207) Copyright (c) 1999-2012,
# http://harbour-project.org/
# Compilador: MinGW GNU C 4.6.1 (32-bit)
# ---------------------------------------------------------------------------------
# Nome da Lib
# ---------------------------------------------------------------------------------
-oDllMinGw
-lhwgui
-lprocmisc
-lhbgt
-lgtwvg
-lgtwvt
-lhbct
-lhbwin
-lhbnf
-lxhb
-lhbtip
-lhbblink
hbct.hbc
-gtgui
# ---------------------------------------------------------------------------------
# Caminhos dos Includes
# ---------------------------------------------------------------------------------
#-incpath=d:\hb32\hwgui\include;
#-Ld:\hb32\hwgui\lib;
-incpath=d:\hb32\hwgui\include;
-Ld:\hb32\hwgui\lib;
# ---------------------------------------------------------------------------------
# Outros Parƒmetros
# ---------------------------------------------------------------------------------
-workdir=.\OBJMINGW
-head=full
-n
-warn=no
-inc
-dHARBOUR
-b
# ---------------------------------------------------------------------------------
# Prg(s) e Rc(s)
# ---------------------------------------------------------------------------------
-hbdynvm
DllMinGw.prg
Código: Selecionar todos
/*
* Harbour Project source code:
* Dynamic library call demonstration. (on Windows)
*
* Copyright 2008 Viktor Szakats (vszakats.net/harbour)
* www - http://harbour-project.org
*
*/
#include "simpleio.ch"
#include "wvtwin.ch"
#include "hbcompat.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvgparts.ch"
#include "dbinfo.ch"
#include "fileio.ch"
#include "hbdyn.ch"
#include "common.ch"
#include "set.ch"
#include "inkey.ch"
PROCEDURE Main()
hLib := hb_libLoad( "DllMinGW.dll" )
//altd()
IF ! Empty( hLib )
n:=hb_DynCall( { "MyMethod", hLib, HB_DYN_CALLCONV_STDCALL })
hb_libFree( hLib )
ENDIF
RETURN
INIT FUNCTION AppSetup()
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
HB_LANGSELECT("PT")
HB_CDPSELECT( "PT850" ) //pt850
REQUEST DBFCDX
RddSetDefault("DBFCDX")
SETMODE(25,80)
SetColor("W+/B")
CLS
SetColor("W+/B")
IniciaJanela()
//Inkey(4)
RETURN Nil
FUNCTION IniciaJanela(nLi,nCi,nLf,nCf)
LOCAL oCrt
PUBLIC nJanelaAplicacao, oDlgHabla
HB_Default(@nLi,0)
HB_Default(@nCi,0)
HB_Default(@nLf,MaxRow())
HB_Default(@nCf,MaxCol())
cTituloJanela:="Teste com DLL"
HB_gtInfo(HB_GTI_FONTNAME, "Lucida Console")
HB_gtInfo(HB_GTI_WINTITLE, cTituloJanela)
//HB_gtInfo(HB_GTI_ICONRES, "IPRINTER2" )
HB_gtInfo(HB_GTI_CLOSABLE, .F. )
HB_gtInfo(HB_GTI_ISGRAPHIC, .T. )
HB_gtInfo(HB_GTI_STDERRCON, .T. )
HB_gtInfo(HB_GTI_COMPATBUFFER, .T. )
HB_gtInfo(HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED )
HB_gtInfo(HB_GTI_SPEC, HB_GTS_SHOWWINDOW, SW_NORMAL )
nJanelaAplicacao:=hwg_FindWindow(,HB_gtInfo(HB_GTI_WINTITLE))
RETURN Nil
FUNCTION HB_GTSYS()
REQUEST HB_GT_WVG_DEFAULT
REQUEST HB_GT_WVT
REQUEST HB_GT_WGU
REQUEST HB_GT_WVG
RETURN Nil
Código: Selecionar todos
@echo off
set path=d:\hbmsvcfork32\bin;d:\hbmsvcfork32\comp\msvc\bin
set hb_compiler=msvc
set include=d:\hbmsvcfork32\comp\msvc\include
set lib=d:\hbmsvcfork32\comp\msvc\lib
set HB_DBG_PATH=.\
hbmk2 dynwin.hbp -rebuild
pause



