我試圖從C#返回對象的集合,並訪問它們USIG C++通過COM,但failed.I已經嘗試了列表ArrayList和IDictionary的一切,失敗了。如何從c#中返回集合對象並在C++中訪問它們?
我曾嘗試
How to return a collection of strings from C# to C++ via COM interop,但也沒有成功。
可以任何身體幫我
我試圖從C#返回對象的集合,並訪問它們USIG C++通過COM,但failed.I已經嘗試了列表ArrayList和IDictionary的一切,失敗了。如何從c#中返回集合對象並在C++中訪問它們?
我曾嘗試
How to return a collection of strings from C# to C++ via COM interop,但也沒有成功。
可以任何身體幫我
如何使用老式的數組?
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文件我沒有測試過,但它看起來很有希望:)
這是正常的,你不能將一個對象從C#傳遞給C++或從C++傳遞給C#。 c#中的對象不像C++中的對象。你可以通過c#傳遞給C++的類型是bool,int和char。另外,請注意類型的大小......例如,c#中的char是C++中的wchar_t。
@Partial,你提出一個重要的觀點。您不能將.NET對象傳遞迴C++(除非它是託管C++),因爲.NET對象語義與C++對象語義不同。
@Cute:你可以,但是,通過COM接口指針。如果您需要使用「傳統C++」代碼與.NET對象進行交互,請使用COM接口,而不是對象。
確保您的對象標記爲一個COM對象,您實現一個包含你的C++需要方法的合適的接口。然後,將接口引用的數組傳回給C++代碼。 C++代碼應該得到COM接口指針的SafeArray,它可以使用通常的COM語義(AddRef()等)進行操作。
恩你給我一些代碼來獲得想法。 我HAV使用的IDictionary也genric界面,但filaed在C來到達值++ – Cute 2009-07-07 07:51:59
你嘗試過什麼埃裏克建議(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