2009-06-28 46 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

相关问题