如何在公寓中使用.NET COM RCW?

时间:2017-05-23 17:23:37

标签: .net com

我有一个本机C ++ COM对象,它实现了一个名为ILogger的接口。它使用线程模型" Both"并且聚合了一个免费的线程编组器。

使用.NET中的这一切都很好,除非我使用来自不同公寓的ILogger的.NET引用。这导致了可怕的Unable to cast COM object of type 'System.__ComObject' to interface type ...ILogger例外。

我理解一个并不意味着在没有编组的情况下使用来自不同公寓的COM对象,但是,它似乎在其他情况下有效。例如,在我的实例中,有一个Application对象不使用任何自定义封送器。我可以访问它"很好"来自非STA线程(它在STA中创建)。此外,使我的记录器使用NTA而不是MTA(以及默认的中性公寓封送器,因此没有存根等)没有抛出异常(这不完全准确,这在我的机器上工作,但是,不是一次部署在别处)。

我的问题主要是为什么我可以从不同的公寓访问Application之类的对象,但我看到我的自由线程记录器出现故障。如果.NET在第一个实例中编组,为什么不在第二个实例中编组。此外,有没有办法在.NET中的另一个公寓中使用我的记录器而不创建一个试图保持公寓亲和力的新实例?