我有一个用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参数?
答案 0 :(得分:0)
我不是VB.NET的人,但我可以说VB.NET没有out
等价物。可能的方法是在导入Bar
方法时使用CDN paths属性。然后,它取决于编译器如何设置它。
答案 1 :(得分:0)
正如Hans Passant所说,这不是VBA错误,而是.NET COM库中的错误。
通过修复COM库,我能够让out参数正常工作。
感谢您的支持!