使用 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 库,我能够让输出参数正常工作。
感谢您的支持!
我有一个用 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 库,我能够让输出参数正常工作。
感谢您的支持!