我有一些C#COM Api示例有效,但在转换为F#时失败。
F#代码是:
let list = api.CreateXXX() :?> XXX
C#转换是隐式的(该对象将变量定义为XXX,然后使用api.CreateXxxModule()进行初始化,而无需进一步转换。
private XXX list;
[...]
list = api.CreateXXX()
附加信息:无法转换类型的COM对象 '系统.__ ComObject'到界面类型 ' ThomsonReuters.Interop.RTX.AdxRtList&#39 ;.此操作失败,因为 用于接口的COM组件的QueryInterface调用 IID' {057B736E-03DF-11D4-99C8-00105AF7EDAD}'由于失败而失败 以下错误:Cette interface n'est pas prize en charge(例外 来自HRESULT:0x80004002(E_NOINTERFACE))。
使用XXXClass代替XXX进行向下转换也不起作用:
附加信息:无法转换类型的COM对象 '系统.__ ComObject'到班级类型 ' XXXClass&#39 ;.进入的COM组件 CLR并且不支持IProvideClassInfo或者没有任何支持 注册的interop程序集将包装在__ComObject类型中。 此类型的实例不能转换为任何其他类;但他们 只要底层的COM组件,就可以转换为接口 支持QueryInterface调用接口的IID。
是否有人将F#与COM Apis一起使用,通常与C#一起使用,并对这些类型的转换有一些提示?
非常感谢!
答案 0 :(得分:4)
将STAThread属性添加到主函数中:
module Main =
[<STAThread>]
do
...