无法使用VBA中的string调用VB.NET COM DLL函数

我用一个简单的testing函数实现了一个VB.NET DLL:

<ComVisible(True)> Function TestString ( <MarshalAs(UnmanagedType.BStr)> xyz As String) As <MarshalAs(UnmanagedType.BStr)> String Dim y As Integer TestString = "Hello" End Function 

这个function很简单。 在VBA中,我适当地声明了这个函数:

 Public Declare Function TestString Lib "myDLL.dll" (xyz As String) As String 

从VBA我也显然加载DLL。 然而问题是,当我运行这样的function:

 Dim st as String st = "Hello" Debug.Print TestString(ByVal st) 

我收到一条消息说错误的DLL调用约定。 另一方面,当我删除<MarshalAs(UnmanagedType.BStr)>function工作,但打印"Hello"后不久崩溃。

我究竟做错了什么?

Public Declare Function是用于调用从DLL 导出的 Public Declare Function的语法,这是与COM不同的机制。

要使用COM添加对DLL的引用,请创build包含TestString的类的实例,然后调用该实例: r = classInstance.TestString("Hello")