我在dll中有c#对象。我通过MFC DLL的COM调用此对象的方法。这样:
BOOL CForwarder::InitMyManagedFlex()
{
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
IForwarderPtr pIFwd(__uuidof(MyForwarder));
long lResult = 0;
VARIANT_BOOL ret = FALSE;
BSTR bstr = AsciiToBSTR("AAA");
// Call the Add method.
pIFwd->Start(bstr, &ret);
SysFreeString(bstr);
wprintf(L"The result is %dn", ret);
// Uninitialize COM.
CoUninitialize();
return (ret == VARIANT_TRUE) ? TRUE : FALSE;
}
一段时间后,我以完全相同的方式调用另一个方法stetimeFormat。问题是,每当我以这种方式调用我实例化新的C#对象,但实际上,我正在尝试达到第一次创建的对象,而只是将其属性之一设置为另一个值。
问题似乎在这一行中:
IForwarderPtr pIFwd(__uuidof(MyForwarder));
那么,如何将接口到相同的C#对象而不是创建新的接口?
// Create the interface pointer.
IForwarderPtr pIFwd(__uuidof(MyForwarder));
实际上,该行有两件事。它创建了其uuid/classID为 MyForwarder
and 的com对象。将结果存储在 pIFwd
。
如果您每次不想创建它,请尝试以下操作:
IForwarderPtr pIFwd(__uuidof(MyForwarder));
pIFwd->Start(bstr, &ret);
.
.
.
.
pIFwd->SetTimeFormat (....)
.
.
.
SysFreeString(bstr);
wprintf(L"The result is %dn", ret);
// Uninitialize COM.
CoUninitialize();
您可以将以下语句移至构造函数
HRESULT hr = CoInitialize(NULL);
_pIFwd(__uuidof(MyForwarder)); //where _pIFwd is a member variable of your class
&deStructor的语句 counitialize()。添加 iforwardptr 作为类的成员变量。
这样,您将能够重新使用同一实例。