如何在VBA中使用来自C#的非托管导出?
我正在尝试使用非托管导出包()从C#dll导出函数。我不想使用COM 不幸的是,我遇到了一个错误: 找不到DLL入口点_TestDLL@4在DllName中 我的C#类看起来像这样:如何在VBA中使用来自C#的非托管导出?,c#,vba,C#,Vba,我正在尝试使用非托管导出包()从C#dll导出函数。我不想使用COM 不幸的是,我遇到了一个错误: 找不到DLL入口点_TestDLL@4在DllName中 我的C#类看起来像这样: public class TestClass { [DllExport] public static int TestDLL(int x) { return x + 2; } } Private Declare Function TestDLL Lib "DllNa
public class TestClass
{
[DllExport]
public static int TestDLL(int x)
{
return x + 2;
}
}
Private Declare Function TestDLL Lib "DllName" Alias "_TestDLL@4" (ByVal x As Long) As Long
Public Sub TestFunc()
MsgBox CStr(TestDLL(2))
End Sub
我这样称呼它:
public class TestClass
{
[DllExport]
public static int TestDLL(int x)
{
return x + 2;
}
}
Private Declare Function TestDLL Lib "DllName" Alias "_TestDLL@4" (ByVal x As Long) As Long
Public Sub TestFunc()
MsgBox CStr(TestDLL(2))
End Sub
为什么它不能工作…?多亏了Hans Passant的评论,我尝试在我的dll上使用dumpbin.exe/exports,它给出了一个输出: 文件DllName.dll的转储
00000000 characteristics
5315D2DA time date stamp Tue Mar 04 14:19:22 2014
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 000027DE TestDLL
文件类型:DLL
节包含\DllName.dll的以下导出
00000000 characteristics
5315D2DA time date stamp Tue Mar 04 14:19:22 2014
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 000027DE TestDLL
总结
2000 .reloc
2000 .rsrc
2000 .sdata
2000 .text
如您所见,函数名为TestDLL。我将VBA中的声明更正为:
Private Declare Function TestDLL Lib "DllName" (ByVal x As Long) As Long
现在它可以正常工作了:)听起来你只是没有正确使用该工具,比如没有使用项目模板。别名不是必需的,最好将其删除。通过在DLL上运行dumpbin.exe/exports进行双重检查。