我使用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在调试时崩溃)