簡體   English   中英

通過COM將C#字符串轉換為C ++ WCHAR *

[英]Convert C# string to C++ WCHAR* over COM

我有一個要從C#代碼調用的COM本地服務器(用C ++實現)。 給我帶來麻煩的方法是這樣的:

HRESULT Foo([in] const WCHAR* bar);

參數在C#端顯示為ref ushort ,但我想將字符串而不是數字傳遞給方法。 如何使該方法接受來自C#的字符串?

C#非常簡單:

IFooService service = new IFooService();
service.Foo("blah blah");

我看到其他答案,這些答案描述了DllImport該函數,然后在參數上使用[MarshalAs(UnmanagedType.LPWStr)] ,但是由於COM服務器作為本地服務器運行(這意味着它是一個獨立的exe而不是dll),並且接口的一部分,我認為我無法DllImport 我是否需要對服務器的代理dll進行某些處理?

您可以嘗試以下方法:

dynamic bar = "blah blah blah";
IFooService service = new IFooService();
service.Foo(bar);

看來至少有兩個解決方案。

  1. 字符串屬性添加到IDL中的參數以將指針視為字符串,因此:

     HRESULT Foo([in] const WCHAR* bar); 

    變成這個:

     HRESULT Foo([in, string] const WCHAR* bar); 

    然后,可以將字符串從C#傳遞給方法。

  2. 按照http://www.moserware.com/2009/04/using-obscure-windows-com-apis-in-net.html上的說明進行操作,並使用名稱恰當的ComImport屬性聲明接口並在字符串參數前添加前綴與[MarshalAs(UnmanagedType.LPWStr)]

我選擇#1是因為它是最簡單的,並且不涉及向客戶端添加一堆額外的代碼。

暫無
暫無

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

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