无法将 MWArray.dll 绑定到 F# 交互



我使用MATLAB . net Builder生成了一个。net库。我设法在c#中使用它而没有任何问题,但我现在正试图使用我在f# Interactive中创建的快速f#包装器做一些测试。

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

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

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

将会话绑定到"C:Program FilesmypathbinDebugMWArray.dll"…

紧随其后

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

WRN:程序集绑定日志被关闭。要启用程序集绑定失败日志记录,请设置注册表值[HKLMSoftwareMicrosoftFusion!]EnableLog] (DWORD)到1。注意:程序集绑定失败日志记录会带来一些性能损失。要关闭此功能,请删除注册表值[HKLMSoftwareMicrosoftFusion!EnableLog]。

由于错误而停止

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

是否有人成功地使用MATLAB .Net库从f# ?

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

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

我不确定f# -交互,但我刚刚设法制作了一个非常基本的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

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

在c#中使用。net 4.0 +的类似解决方案:在。net 4.5项目中使用。net 2.0 DLL (vshost在调试时崩溃)

最新更新