簡體   English   中英

使用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給出當調用該函數時錯誤“不設置到對象的實例對象引用”。 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);
}

為什么即使所有變量都具有值並且最后三個參數均為out參數,VBA仍會引發“對象引用未設置為對象實例”錯誤?

我不是一個VB.NET的人,但我可以告訴大家,VB.NET沒有out等價的。 可能的方法是在導入Bar方法時使用<Out>屬性。 然后,這取決於編譯器如何進行設置。

正如Hans Passant所說,這不是VBA錯誤,而是.NET COM庫中的錯誤。

通過修復COM庫,我可以使out參數正常工作。

謝謝您的支持!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM