我试图在我的代码中实现registry免费的COM explicilty(不能使用registry免费的COM通过应用程序清单,因为它只能在exe级别):我创build一个静态类加载COM DLL,调用DllGetClassObject,那么IClassFactory :: CreateInstance()。
工作很好的一点。 实现细节在http://www.dimastr.com/redemption/security.htm#redemptionloader
但是,如果我从多个线程实例化我的COM对象(例如首先在主线程,然后从第二线程),.Net开始要求我的对象IMarshal,我没有实现。
如果COM库在registry中注册,一切工作正常。 如果库没有在registry中注册(这是所有这一切的完整点),.Net要求IMarshal。
有没有什么办法可以得到默认实现的IMarshal,COM内部使用? 或者如果我的对象没有实现IMarshal,防止它失败?
谢谢!
CoGetStandardMarshal用于获取默认实现; 然而这种方法是没有文档的 – 你必须四处搜索才能得到它的原型。
但是,如果您不提供IMarshal
接口,则使用默认实现 。 所以我觉得问题在别处。