InvokeMember时缺少方法异常

时间:2015-01-22 02:30:23

标签: f# com missingmethodexception

我在F#中创建一个COM组件。该组件预计将从脚本中使用。

组件代码:

namespace WebUIPlugin

open System
open System.Windows
open System.Runtime.InteropServices

[<Guid("BAEF0C5B-EFA5-4868-8342-7A1E6F8F7AF4")>]
type IPlugin =
    [<DispId(1)>]
    abstract OpenFormFromFile : path:string -> unit

[<Guid("8D71E2DB-D718-4595-B856-58D14EEAEBB2");
ClassInterface(ClassInterfaceType.None);
ComVisible(true)>]
type Plugin = class
  new () = {}

  interface IPlugin with
    member this.OpenFormFromFile(path) =
      let showWindow =
        let window = Window()
        window.Show

      UI.spawn showWindow |> ignore
  end
end

我正在使用regasm /codebase Plugin.dll进行注册,并且可以通过编写cscript test.js脚本来运行。

test.js如下:

var obj = new ActiveXObject("WebUIPlugin.Plugin");
obj.OpenFormFromFile("");

它甚至在OpenFormFromFile的断点处停止。到目前为止一切都很好。

不幸的是,我无法使用F#/ C#:

let objectType = Type.GetTypeFromProgID("WebUIPlugin.Plugin")
let handler = Activator.CreateInstance(objectType)
objectType.InvokeMember("OpenFormFromFile", BindingFlags.InvokeMethod, null, handler, [|""|]) |> ignore
var objectType = Type.GetTypeFromProgID("WebUIPlugin.Plugin");
dynamic handler = Activator.CreateInstance(objectType);
objectType.InvokeMember("OpenFormFromFile", BindingFlags.InvokeMethod, null, handler, new object[]{""});

代码抛出异常:

  

mscorlib.dll中发生了System.MissingMethodException类型的未处理异常   其他信息:试图访问失踪成员。

Everything(组件,测试C#和F#项目,regasm,cscript)在x64或x86中始终如一。使用相同的结果 - WSH脚本可以工作,.NET程序集不会。

0 个答案:

没有答案