默认的IMarshal实现?

时间:2010-10-24 00:14:41

标签: .net windows multithreading com marshalling

我试图在我的代码中实现无注册表的COM explicilty(不能通过应用程序清单使用无注册表的COM,因为它只适用于exe级别):我创建了一个加载COM dll的静态类,调用DllGetClassObject,然后调用IClassFactory :: CreateInstance()。

工作得很好。实施细节位于http://www.dimastr.com/redemption/security.htm#redemptionloader

但是如果我从多个线程实例化我的COM对象(例如,首先在主线程上,然后从辅助线程实例化),。Net开始向我的对象询问IMarshal,我没有实现。

如果COM库在注册表中注册,一切正常。如果该库未在注册表中注册(这是所有这一切的全部意图),。。Net要求IMarshal。

有什么方法可以获得COM在内部使用的IMarshal的默认实现?如果我的对象没有实现IMarshal,请防止它出现故障?

谢谢!


1 个答案:

答案 0 :(得分:4)

CoGetStandardMarshal用于获取默认实现;但是这种方法没有记录 - 你必须四处寻找它的原型。

但是,如果您不提供IMarshal界面,则使用default implementation。因此,我认为问题出在其他地方。