无法将MWArray.dll绑定到F#Interactive

时间:2011-12-14 08:37:01

标签: f# matlab-deployment f#-interactive

我使用MATLAB .Net Builder生成了一个.Net库。我设法在C#中没有任何问题地使用它,但我现在尝试使用我在F#Interactive中创建的快速F#包装器进行一些测试。

问题是,我似乎无法在F#Interactive中使用MWArray类。

我设法使用#r命令引用DLL,但在MathWorks命令后使用intellisense时找不到open域。

此外,如果我运行我的代码,当流遇到MWArray时,我会收到以下错误:

  

将会话绑定到'C:\ Program Files \ mypath \ bin \ Debug \ MWArray.dll'...

接着是

  

错误FS0193:内部错误:无法加载文件或程序集'file:/// C:\ Program Files \ mypath \ bin \ Debug \ MWArray.dll'或其依赖项之一。尝试加载格式不正确的程序。   System.IO.FileNotFoundException:无法加载文件或程序集“MWArray,Version = 2.11.0.0,Culture = neutral,PublicKeyToken = e1d84a0da19db86f”或其依赖项之一。该系统找不到指定的文件。   文件名:'MWArray,Version = 2.11.0.0,Culture = neutral,PublicKeyToken = e1d84a0da19db86f'   (...)at。$ FSI_0009.main @()in C:\ Program Files \ mypath \ ScriptTest.fsx:第49行

     

警告:装配绑定日志记录已关闭。   要启用程序集绑定失败日志记录,请将注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog](DWORD)设置为1。   注意:程序集绑定失败日志记录会导致一些性能损失。   要关闭此功能,请删除注册表值[HKLM \ Software \ Microsoft \ Fusion!EnableLog]。

     

因错误而停止

我真的不知道它来自何处以及如何解决问题。

有没有人成功使用F#的MATLAB .Net库?

你有建议帮我解决问题吗?

2 个答案:

答案 0 :(得分:2)

我不熟悉MatLab和.NET互操作,但你检查了架构吗?换句话说,请确保您没有尝试将64位DLL加载到32位进程中,反之亦然。此外,如果要加载对本机程序集进行P / Invoke调用的托管程序集,则该本机DLL应位于运行当前FSI会话的目录中。您可以通过CurrentDirectory类的System.Environment属性检查并设置此值。

答案 1 :(得分:0)

我不确定F#-interactive,但我设法制作了一个非常基本的F#3.0控制台应用程序,该应用程序使用MWArray.dll和matlab函数,我用matlab NE构建器编译...

open makesquare
open MathWorks.MATLAB.NET.Arrays
[<assembly: MathWorks.MATLAB.NET.Utility.MWMCROption("-nojit")>] 
do()

[<EntryPoint>]
let main argv = 
    let stuff = new MLTestClass()
    let numArray = new MWNumericArray(5)
    let res = stuff.makesquare(1, numArray)
    let res_val = res.GetValue(0)
    printfn "%A" res_val
    System.Console.ReadKey()
    0 // return an integer exit code

makesquare函数,只是本教程中的简单函数 http://www.mathworks.se/help/dotnetbuilder/ug/create-a-net-component-from-matlab-code.html

对于C#中使用.net 4. +的类似解决方案: use .net 2.0 dll in .net 4.5 project (vshost crashes on debug)