我正在使用没有源代码的3d派对ActiveX组件。我可以将组件添加到我的MFC对话框中。当我这样做时,创建一个包装类,其中包含许多函数,如下所示:
void SetNextMovePCI2FastLink(short nNodeNumber, short nCardNumber)
{
static BYTE parms[] = VTS_I2 VTS_I2 ;
InvokeHelper(0x109, DISPATCH_METHOD, VT_EMPTY, NULL, parms, nNodeNumber, nCardNumber);
}
使用这些包装函数,我可以正常运行。但是,由于从不同的线程访问COM对象,我需要为此对象编组COM接口。如何在没有包装器的情况下直接在COM接口上调用方法?是否有一种简单的方法将包装器应用于原始COM接口,因此包装器可以重新使用?或者我必须使用IDispatch
接口的Invoke()
方法吗?如果是这样,有没有办法找出要调用的真正的方法名称字符串?包装器使用诸如上面的0x109之类的数字来解决每个方法。我可以以某种方式利用包装器的InvokeHelper()
直接在给定的COM接口上调用方法吗?
答案 0 :(得分:0)
我引用了Igor Tandetnik的回复:
"自从我使用MFC以来已经有一段时间了,所以我的回忆很模糊。我相信,包装器派生自COleDispatchDriver
,它有IDispatch
的构造函数和AttachDispatch
方法。使用这些,您可能能够获得原始IDispatch
指针,将其编组到另一个线程,然后创建一个新的包装器实例并将指针附加到它。"
基本上,如果你想在编组到另一个线程后使用你的MFC包装器用于COM / ActiveX对象,你可以使用COleDispatchDriver
来包装你的IDispatch并使用一些宏魔法调整代码来调用相同的{ {1}}调用驱动程序对象。或者扩展包装器以使用包括通过驱动程序作用于编组接口,如下面的代码。谢谢,伊戈尔。
InvokeHelper(..)