如何使用gcc编译器/ Mingw为visual basic创建dll?

时间:2010-04-27 10:04:59

标签: dll gcc mingw

如何使用gcc编译器/ Mingw为visual basic创建dll?

3 个答案:

答案 0 :(得分:8)

以下是我如何让MinGW构建一个在Excel 2003 VBA中使用的DLL。

<强> fooBar.cpp

int __stdcall Foo(int x)   
{   
    return x * x;   
}

double __stdcall Bar(double x)   
{   
    return x * x;   
}

1)启动MinGW shell并创建一个名为fooBar的目录。 关闭Excel工作簿(如果已打开)。

mkdir -p fooBar
cd fooBar
rm *.a *.dll *.def 

2)编译并生成.def文件 - 注意:此dll不起作用,因为它有错位的符号。

gcc -shared -o fooBar.dll fooBar.cpp -Wl,--output-def,fooBar.def,--out-implib,libfooBardll.a

生成的fooBar.def类似于:

EXPORTS
    _Z3Bard@8 @1
    _Z3Fooi@4 @2

3)通过为生成的符号添加干净的符号别名来修改生成的fooBar.def文件。 fooBar.def现在应该看起来像:

EXPORTS
    _Z3Bard@8 @1
    _Z3Fooi@4 @2
    Bar = _Z3Bard@8
    Foo = _Z3Fooi@4

4)再次使用Cleaup(修改后的fooBar.def除外)

rm *.a *.dll 

5)使用生成符号的干净符号别名编译.def文件。

gcc -shared -o fooBar.dll fooBar.cpp fooBar.def -Wl,--out-implib,libfooBar_dll.a

6)打开Excel并添加以下VBA代码 (确保使用正确的路径,怀疑它将包含mmorris)

Private Declare Function Foo Lib _
    "C:\MinGW\msys\1.0\home\mmorris\fooBar\fooBar.dll" _
    (ByVal x As Long) As Long

Private Declare Function Bar Lib _
    "C:\MinGW\msys\1.0\home\mmorris\fooBar\fooBar.dll" _
    (ByVal x As Double) As Double

7)如果要从单元格类型=Foo(5)=Bar(5)

中调用Excel工作簿中的函数

答案 1 :(得分:1)

这:http://www.mingw.org/wiki/DLL可能对您有用。

答案 2 :(得分:0)

VB(所有版本)更喜欢pascal调用约定。

使用WINAPI声明外部函数并将它们导出到.def文件中。