我正在为提供COM接口IPlugin的应用程序编写库插件。我必须实现函数Start(),因为该应用程序通过ProgID调用我的库并在那里提供接口实例。
简短的使用样本:
[ComVisible(true)]
[Guid({GUID})]
[ClassInterface(ClassInterfaceType.None)]
public class Program : IPlugin
{
[STAThread]
public void Start(IInterface myInterface)
{
var a = myInterface.GetValue();
}
}
当我在主线程中使用界面时,一切都很顺利。
但是,当我想在其他线程中使用该接口时,我会遇到异常:
无法将“System .__ ComObject”类型的COM对象转换为接口类型“IInterface”。此操作失败,因为对于具有IID“{GUID}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口
我尝试了“保存”接口到GlobalInterfaceTable并在其他线程上“加载”它,尝试了CoMarshalInterThreadInterfaceInStream / CoGetInterfaceAndReleaseStream,尝试了来自this SO源和许多其他人的解决方案,总是得到相同的错误(使用“已保存”和“加载“相同线程上的接口仍然可以,所以我认为,我正在使用它。”
也许我被误解了一些东西,我无法在这里尝试解决它。
我正在尝试这么久,但我没有解决方案。
如果还有更多的事情可以尝试,我很乐意解决这个问题。