簡體   English   中英

如何將C#接口的方法參數公開為特定的COM / ODL類型?

[英]How to expose a C# interface's method arguments as specific COM/ODL types?

我在C#中定義一個接口,該接口將在C#中實現,但從非托管C ++模塊作為COM對象調用。

我知道我想要/需要C ++ API的外觀,以及如何通過ODL定義它:

//args is an array of BSTR e.g VT_ARRAY|VT_BSTR
HRESULT DoMethod(/*[in]*/BSTR name, /*[in]*/VARIANT args);

關於VARIANT ,我不確定如何在C#中進行設置以使TLB定義與此匹配。 可能會像下面這樣簡單嗎?

void DoMethod(string name, string args[])

我一直在尋找COM / .NET互操作文檔,但是我錯過了有關此部分的內容,或者根本不了解所描述的內容!

順便說一句,如何查看給定C#接口正在發出的COM定義? DLL / TLB是否易於檢查?

如果您想要C ++方面的變體(為什么?),則需要聲明它:

using System.Runtime.InteropServices;

namespace LibraryName {
    [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IFoo {
        void DoMethod(string name, object args);
    }
}

用Regasm.exe / codebase / tlb注冊C#程序集。 / tlb選項生成類型庫,您可以在C ++代碼中使用#import指令使用它。 足以看一看,它生成的LibraryName.tlh文件具有聲明。 或者,您可以從Visual Studio命令提示符運行Oleview.exe,然后使用“文件”>“查看Typelib”進行查看。

您最初的本能選擇更好,string []在C ++方面顯示為SAFEARRAY *。 這樣可以減少事故發生。

暫無
暫無

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

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