如何使用gcc编译器/ Mingw为visual basic创建dll?
答案 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)
答案 1 :(得分:1)
这:http://www.mingw.org/wiki/DLL可能对您有用。
答案 2 :(得分:0)
VB(所有版本)更喜欢pascal调用约定。
使用WINAPI声明外部函数并将它们导出到.def文件中。