在F#中引用ActiveX

Ale*_*xan 1 f# interop activex reference f#-interactive

如果我想在.NET项目中使用ActiveX,我使用Add Reference ...对话框将其添加为引用,它会生成实际引用的interop程序集.

但是如果我想使用F#Interactive中的ActiveX,我应该首先创建F#项目,添加ActiveX引用然后从F#引用生成的互操作程序集:

#r "obj\\Interop.MyActiveX.dll" 
Run Code Online (Sandbox Code Playgroud)

或者可以直接引用它,例如在VB脚本中:

Set mydoc = CreateObject("MyActiveX")
Run Code Online (Sandbox Code Playgroud)

或者在PowerShell中:

$mydoc = new-object -comobject MyActiveX
Run Code Online (Sandbox Code Playgroud)

Pet*_*etr 5

您可以像这样直接创建ActiveX控件:

let actxtype = Type.GetTypeFromProgID("MyActiveX")
let instance = Activator.CreateInstance(actxtype)
Run Code Online (Sandbox Code Playgroud)

但是你的实例将是'obj = System .__ ComObject'类型,你将不得不使用这样的反射来调用它的方法:

actxtype.InvokeMember("MethodName", BindingFlags.InvokeMethod | BindingFlags.Public, 
    null, instance, new[] { (*method parameters*) } );
Run Code Online (Sandbox Code Playgroud)

这是关于Invoke的文档:http://msdn.microsoft.com/en-us/library/de3dhzwy( v= vs.110).aspx

如果引用互操作程序集,则将具有属性和方法的"常规"类型.