代码之家  ›  专栏  ›  技术社区  ›  Dmitry Streblechenko

默认的imarshal实现?

  •  4
  • Dmitry Streblechenko  · 技术社区  · 15 年前

    我试图在代码中明确地实现无注册表COM(不能通过应用程序清单使用无注册表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 回复  |  直到 15 年前
        1
  •  4
  •   RolKau    15 年前

    CoGetStandardMarshal 用于获取默认的实现;但是这个方法是未记录的——您必须四处搜索才能得到它的原型。

    但是,如果您不提供 IMarshal 接口 default implementation 使用。因此,我认为问题出在别处。