2009-06-28 43 views
0

我試圖從C#返回對象的集合,並訪問它們USIG C++通過COM,但failed.I已經嘗試了列表ArrayList和IDictionary的一切,失敗了。如何從c#中返回集合對象並在C++中訪問它們?

我曾嘗試

How to return a collection of strings from C# to C++ via COM interop,但也沒有成功。

可以任何身體幫我

+0

你嘗試過什麼埃裏克建議(http://stackoverflow.com/questions/1032060/how-to-return-a-collection-of-strings-from-c-to-c-via-com-interop/ 1032356#1032356)?如果是這樣,那究竟是不是工作? – sharptooth 2009-06-29 05:06:07

回答

0

如何使用老式的數組?

public interface IManaged 
{ 
    string[] ReturnArray(); 
} 

public class Managed : IManaged 
{ 
    public string[] ReturnArray() 
    { 
     return new string[] { "A", "B", "C" }; 
    } 
} 

運行tlbexp.exe這個.dll文件創建一個具有.TLB:

interface IManaged : IDispatch { 
    [id(0x60020000)] 
    HRESULT ReturnArray([out, retval] SAFEARRAY(BSTR)* pRetVal); 
}; 

利用本地的.exe .dll文件我沒有測試過,但它看起來很有希望:)

0

這是正常的,你不能將一個對象從C#傳遞給C++或從C++傳遞給C#。 c#中的對象不像C++中的對象。你可以通過c#傳遞給C++的類型是bool,int和char。另外,請注意類型的大小......例如,c#中的char是C++中的wchar_t。

2

@Partial,你提出一個重要的觀點。您不能將.NET對象傳遞迴C++(除非它是託管C++),因爲.NET對象語義與C++對象語義不同。

@Cute:你可以,但是,通過COM接口指針。如果您需要使用「傳統C++」代碼與.NET對象進行交互,請使用COM接口,而不是對象。

確保您的對象標記爲一個COM對象,您實現一個包含你的C++需要方法的合適的接口。然後,將接口引用的數組傳回給C++代碼。 C++代碼應該得到COM接口指針的SafeArray,它可以使用通常的COM語義(AddRef()等)進行操作。

+0

恩你給我一些代碼來獲得想法。 我HAV使用的IDictionary也genric界面,但filaed在C來到達值++ – Cute 2009-07-07 07:51:59

相關問題