我在DLL中有C#对象。 我通过COM从MFC DLL调用此对象的方法。像这样:
IForwarderPtr pIFwd(__uuidof(MyForwarder));
然后过了一会儿我以完全相同的方式调用另一个方法SetTimeFormat。 问题是,每当我以这种方式调用时,我实例化一个新的C#对象,但实际上我试图到达第一次创建的同一个对象,只需将其中一个属性设置为不同的值。
问题似乎在于这一行:
AddWithValue
那么如何将接口连接到同一个C#对象而不是创建一个新对象?
答案 0 :(得分:0)
// Create the interface pointer.
IForwarderPtr pIFwd(__uuidof(MyForwarder));
实际上这条线做了两件事。它创建了一个COM对象,其UUID / ClassID为MyForwarder
,将结果存储在pIFwd
中。
如果您不想每次都创建它:
IForwarderPtr pIFwd(__uuidof(MyForwarder));
pIFwd->Start(bstr, &ret);
.
.
.
.
pIFwd->SetTimeFormat (....)
.
.
.
SysFreeString(bstr);
wprintf(L"The result is %d\n", ret);
// Uninitialize COM.
CoUninitialize();
答案 1 :(得分:0)
您可以将以下语句移至构造函数
HRESULT hr = CoInitialize(NULL);
_pIFwd(__uuidof(MyForwarder)); //where _pIFwd is a member variable of your class
&安培;声明 CoUninitialize()到你的析构函数。 将 IForwardPtr 添加为您班级的成员变量。
这样您就可以重复使用相同的实例。