F#& COM api向下倾斜问题

时间:2016-10-26 07:31:38

标签: f# com interop

我有一些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#一起使用,并对这些类型的转换有一些提示?

非常感谢!

1 个答案:

答案 0 :(得分:4)

将STAThread属性添加到主函数中:

module Main =

  [<STAThread>] 
  do
    ...