我需要使用一个COM库来更改CANT。 Apartment State是STA,无需重构即可切换到MTA。针对COM组件的别名注册允许并发调用
它有两种方法
- 方法一是一个短期操作
- 方法二是一个长期运行的操作
我希望能够拨打电话到方法一即使方法二正在进行中。 一种方法,我认为是复制和改变COM组件的实际二进制和注册为一个完全不同的COM组件,然后使用这个alias'd库的一个实例来调用做方法二使主实例只负责拨打方法一。
我已经尝试只是一个十六进制编辑器打开了DLL和更换的ProgID和CLSID,但似乎并不奏效。该注册表项,我所知道的样子没错,但是当我为了我的生成interop程序添加在Visual Studio中引用,生成的库仍然有旧的CLSID,并呼吁方法一仍然阻塞,直到方法二完成。
关于如何使这项工作的任何想法?
这种做法是完全错误的,还是我在正确的轨道上?
如果COM组件需要您使用STA,那么这意味着当“two”正在执行时您不能调用“方法一”。因为唯一可能的方法就是使用线程。该组件明确不支持该组件。联系组件的所有者或供应商以获得建议。 –
难道你不能简单地创建两个线程,都加入STA,并有每个创建组件的实例?是什么让你觉得你需要两个不同的CLSID? –
@HansPassant为了这个问题的目的,只是接受COM组件不能被改变,并且没有什么可以做的。 –