如何从c#返回集合对象并在c ++中访问它们?

时间:2009-06-28 06:42:40

标签: c# c++ com

我已经尝试从c#返回一个对象集合并通过COM访问它们usig c ++但是失败了。我已经尝试过List ArrayList和IDictionary all并且失败了。

我试过了

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

任何人都可以帮助我

3 个答案:

答案 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。