我试图从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