使用C#COM DLL时VBA中的引用(out)参数

时间:2016-05-20 06:21:57

标签: c# vba dll com out

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

DLL中的某些函数包含out参数,这些参数在从VBA使用时无法正常工作:VBA提供错误"对象引用未设置为对象的实例"当函数被调用时。 DLL类中的所有其他函数都正常工作。

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代码(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接口代码(类的接口):

[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引用设置为未设置为对象的实例"错误甚至所有变量都有一个值,最后三个参数都是out参数?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

感谢您的支持!