我已经尝试从c#返回一个对象集合并通过COM访问它们usig c ++但是失败了。我已经尝试过List ArrayList和IDictionary all并且失败了。
我试过了
How to return a collection of strings from C# to C++ via COM interop但也没有成功。
任何人都可以帮助我
答案 0 :(得分:2)
@Partial,你提出了一个重点。您无法将.NET“对象”传递回C ++(除非它是托管C ++),因为.NET对象语义与C ++对象语义不同。
@Cute:但是,您可以通过COM接口指针。如果您需要使用“传统C ++”代码与.NET对象进行通信,请使用COM接口,而不是对象。
确保您的对象被标记为COM对象,并且您实现了一个包含C ++所需方法的合适接口。然后,将接口引用的数组传递回C ++代码。 C ++代码应该获得一个COM接口指针的SafeArray,它可以使用通常的COM语义(AddRef()等)进行操作。
答案 1 :(得分:0)
使用老式阵列怎么样?
public interface IManaged
{
string[] ReturnArray();
}
public class Managed : IManaged
{
public string[] ReturnArray()
{
return new string[] { "A", "B", "C" };
}
}
使用此.dll运行tlbexp.exe会创建一个.tlb,其中包含:
interface IManaged : IDispatch {
[id(0x60020000)]
HRESULT ReturnArray([out, retval] SAFEARRAY(BSTR)* pRetVal);
};
我没有使用原生.exe中的.dll进行测试,但看起来很有希望:)
答案 2 :(得分:0)
通常情况下,您无法将对象从c#传递到c ++或从c ++传递到c#。 c#中的对象与c ++中的对象不同。你可以从c#传递给c ++的类型是bool,int和char。另外,请注意类型的大小...例如,c#中的char是c ++中的wchar_t。