我有一个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对象进行大量调用(例如GetText2
, GetText3
,GetInt
等),所以我更喜欢发送整个对象。有人可以给我建议吗?