1
15
如果希望使用与COM对象不同的线程模型从应用程序调用COM对象,则需要代理/存根。 例如,我们有一个插件,该插件由使用特定线程模型的应用程序加载(不记得是哪个),但我们的COM对象是多线程单元(MTA),因此在进行函数调用时,代理/存根需要整理对象之间的数据,同时还要遵守线程模型的规则。 如果这些规则被破坏,那么COM将抛出异常或返回一个失败的hresult,例如 rpc-e-u错误的线程 如果不选中“合并代理/存根”选项,则Visual Studio将为代理/存根生成一个单独的项目,该项目将生成一个单独的dll。如果需要的话,这会使部署更加困难,但是如果不受线程模型问题的影响,基本上可以忽略它们。 因此,如果调用COM对象的应用程序使用与对象相同的线程模型,则可以不使用代理/存根。 Larry Osterman对 threading models 在他的博客上。 |
2
3
此外,如果您的接口只包含类型库友好类型(BSTR、variant等),并且出现在IDL的库块中,则可以选择将它们“类型库编组”,这意味着系统提供的代理/存根使用类型库中的元数据。 当接口被放入库块中,并且dllRegisterServer被自定义为注册类型库时(如果我正确调用,则将true传递给xxxmodule::dllRegisterServer),系统将根据John Sibly的描述对您的接口进行编组(如果需要)。
此时,代理/存根甚至都没有使用,所以
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |