COM Callable Wrapper关联的是哪个公寓?

4

我一直在阅读关于COM公寓和.NET互操作的内容,但是我还没有找到这个问题的答案。这让我觉得我可能问错了问题。

我知道.NET线程和本地线程一样可以是MTA或STA,并且我能找到相关文档,但是我很少看到关于对象及其CCW与这些公寓相关的信息。

我猜测CCW的线程模型是“Both”,并且CCW会与创建线程所在的任何公寓相关联。

CCW与哪个公寓相关联,我能够控制这种行为吗?

1个回答

4

.NET实现的COM对象通常可以存在于任何类型的COM公寓中。默认情况下,将.NET程序集注册为COM服务器的.NET方法/工具将使用线程模型= Both来注册coclasses。

如果您想将.NET类公开为带有不同线程模型(例如强制为STA)的COM coclass,则需要提供定制的注册函数


我明白了,但是对于不是由CoCreateInstance实例化的对象呢?例如,如果COM客户端调用x.CreateWidget并且该方法的实现返回一个新的.NET对象。返回的Widget的CCW会继承x的CCW的单元类型吗? - Yngve Hammersland
这是一个非常好的问题。在默认情况下(线程模型=Both),答案很明显 - 普通的COM规则将把新对象放置在其创建者(x)的公寓中。然而,我不知道Interop层在创建新的COM包装器以返回给非托管客户端时是否尊重自定义注册:例如,如果x为Both,而Widget被注册为公寓线程(或反之亦然)。你可以试一试。 - Chris Dickson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接