如何从MFC DLL获取包含在COM中的C#对象的接口

时间:2017-11-27 03:54:14

标签: c# c++ interface com

我在DLL中有C#对象。 我通过COM从MFC DLL调用此对象的方法。像这样:

IForwarderPtr pIFwd(__uuidof(MyForwarder));

然后过了一会儿我以完全相同的方式调用另一个方法SetTimeFormat。 问题是,每当我以这种方式调用时,我实例化一个新的C#对象,但实际上我试图到达第一次创建的同一个对象,只需将其中一个属性设置为不同的值。

问题似乎在于这一行:

AddWithValue

那么如何将接口连接到同一个C#对象而不是创建一个新对象?

2 个答案:

答案 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 添加为您班级的成员变量。

这样您就可以重复使用相同的实例。