如何在VBA中使用C#中的非托管导出?

时间:2014-03-04 13:31:52

标签: c# vba

我正在尝试使用Unmanaged Exports包(https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports)从C#dll导出函数。我不想使用COM。

不幸的是,我收到了一个错误:

  

在DllName

中找不到DLL入口点_TestDLL @ 4

我的C#类看起来像这样:

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

为什么它不起作用??

1 个答案:

答案 0 :(得分:2)

感谢Hans Passant的评论,我尝试在我的dll上使用dumpbin.exe / exports,它给出了一个输出:

  

转储文件DllName.dll

     

文件类型: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

现在它可以正常工作:)