佚名通过本文主要向大家介绍了marshal,marshal是什么意思,c marshal,alice marshal,field marshal等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 为什么我的对象的接口只有在dual情况下,才能在跨套间marshal
描述:
解决方案1:
描述:
[
object,
uuid(...),
pointer_default(unique),
library_block
]
__interface IBasePlayer : IUnknown {
...
}
实现此接口的对象为aparment模型,在MTA中创建这个对象并申请IUnknown可以成功,但是申请IBasePlayer就失败,返回E_FAIL。把IBasePlayer加上dual属性,就可以MTA中创建对象并申请IBasePlayer,这是为什么?难道自定义接口不是双接口就不能跨套间marshal了?
解决方案1:
你的对象是aparment,而激活线程进入了一个MTA,这种情况下,对象会在STA中创建,并在MTA中生成一个代理,MTA中访问对象实际是访问代理,所以是跨套间访问。dual属性带有oleautomation的性质,会使用通用列集器,所以不会有问题,但是不使用dual或oleautomation属性的接口需要组件有自己的代理DLL,如果代理DLL制作或使用不正确,在跨套间访问时就会出现错误。
您可能想查找下面的文章:
- 请问CoMarshalInterface是根据什么来确定是否要为一个对象建立一个存根管理器
- IMarshal
- 请教专家被包容和被聚合时是否需要列集Marshal的问题
- 是否可以通过CoMarshalInterThreadInterfaceInStream获得从另外一个线程产生的接口?
- CoMarshalInterThreadInterfaceInStream传递一个特殊的IDispatch
- 跨套间marshal组件指针,用其返回其他组件对像出错!
- 跨套间marshal来的对像指针查地址不为空,但是
- 有关CoGetInterfaceAndReleaseStreamunmarshal的问题
- CoMarshalInterThreadInterfaceInStream只能用于实现了IDispatch的组件?
- 手工Marshal不成功,函数调用hang住了请帮我看看