从包装器返回的COM类对象

时间:2016-11-18 10:40:09

标签: c# c++ com

我有一个C ++ DLL,它包含一个类,可以访问名为ComWrapper的COM对象。该类实现了一个检索COM类实例的方法:

STDMETHOD(GetClassA)(IComClassA** classA);

STDMETHODIMP ComWrapper::GetClassA(IComClassA** classA)
{
    *classA= m_ClassA;
    return S_OK;
}

其中m_ClassA是类型为IComClassA*的预初始化成员变量。 现在我有一个C#应用程序,它使用这个dll来获取COM类对象。

string classAText= "";

IComClassA comClassA = m_ComWrapper.GetClassA();
comClassA.GetText(out classAText);
Console.WriteLine("Text: {0}", classAText);

这里m_ComWrapper是一个用m_ComWrapper = new ComWrapper();实例化的成员类当我运行这个应用程序时,它第一次打印正确的值,第二次也是,但第三次它崩溃了致电comClassA.GetText(out classAText)。我想这里有一个内存问题,它有2次工作,然后只是“运气”失败。

所以我想知道我做错了什么。我本质上不是COM专家,也许我正在做的事情(通过包装器返回COM类)不是应该这样做的。

我可以在COM包装器中实现函数GetClassAText,因此不返回类对象而是返回文本,但我需要对comClassA对象进行大量调用(例如GetText2GetText3GetInt等),所以我更喜欢发送整个对象。有人可以给我建议吗?

0 个答案:

没有答案