使用 C# COM DLL 时在 VBA 中引用(输出)参数

Reference (out) parameters in VBA when using C# COM DLL

我有一个用 C# 编写的 COM DLL。我正在使用来自 VBA (MS Access 2010) 的 DLL。

DLL 中的某些函数包含 out 参数,这些参数在从 VBA 使用时无法正常工作:调用函数时 VBA 给出错误 "Object reference not set to an instance of an object"。 DLL class 中的所有其他函数都正常工作。

VBA代码:

Dim par0 As String
par0 = "test"

Dim outPar1 As Boolean
Dim outPar2 As myDllNamespace.Foo
Set outPar2 = New myDllNamespace.Foo
Dim outPar3 As String

dllClassInstance.Bar par0 outPar1 outPar2 outPar3

C# COM DLL 代码(Class for dLLClassInstance):

[ProgId("myDllNamespace.DllTestClass")]
[Guid( ... ),
 ClassInterface(ClassInterfaceType.None),
 ComDefaultInterface(typeof(IDllTestClass))]
public class DllTestClass : IDllTestClass
{
    public void Bar(string filter, out bool success, out Foo entries, out string html) { ... }
}

C# COM DLL接口代码(接口为class):

[Guid( ... ), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IDllTestClass
{
    void Bar(string filter, [Out] out bool success, [Out] out Foo entries, [Out] out string html);
}

为什么 VBA 抛出 "Object reference not set to an instance of an object" 错误,即使所有变量都有一个值并且最后三个参数无论如何都是输出参数?

我不是 VB.NET 人,但我只能说 VB.NET 没有 out 等价物。可能的方法是在导入 Bar 方法时使用 < Out > 属性。然后它取决于编译器如何设置它。

正如 Hans Passant 所说,这不是 VBA 错误,而是 .NET COM 库中的错误。

通过修复 COM 库,我能够让输出参数正常工作。

感谢您的支持!