我试图在我的代码中实现无注册表的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,请防止它出现故障?
谢谢!
答案 0 :(得分:4)
CoGetStandardMarshal用于获取默认实现;但是这种方法没有记录 - 你必须四处寻找它的原型。
但是,如果您不提供IMarshal
界面,则使用default implementation。因此,我认为问题出在其他地方。