1

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

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

我设法使用该命令引用了 DLL ,但是在命令之后使用智能感知时#r我找不到域。MathWorksopen

此外,如果我运行我的代码,当流程遇到以下错误时,我会收到以下错误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:line 49

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

因错误而停止

我真的不知道这是从哪里来的以及如何解决这个问题。

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

你有什么建议可以帮助我解决我的问题吗?

4

2 回答 2

2

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

于 2011-12-14T18:17:28.067 回答
0

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

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

对于带有 .net 4.+ 的 C# 中的类似解决方案: 在 .net 4.5 项目中使用 .net 2.0 dll(vshost 在调试时崩溃)

于 2014-02-28T20:30:55.380 回答