从dot net中运行Matlab代码

3

我用Matlab 2013编写了一个小程序,我在我的dll文件中看到了所有函数:Test.TestMethods

我将其作为参考添加到我的.NET项目中,并从Matlab bin\win64\v2.0文件夹中添加了MWArray dll文件。

** 更新:应用程序在Matlab生成的代码的此行崩溃:

mcr= new MWMCR("", ctfFilePath, embeddedCtfStream, true);

如果我嵌入ctf文件,程序会崩溃,如果不嵌入,程序会抛出异常。
我已将程序设置为针对X64进行构建。
一旦我尝试创建对象:
Test.TestMethods test = new Test.TestMethods();

我的应用程序崩溃了。我只能在外部的 Visual Studio 实例中看到:
Unhandled exception at 0x0000000001D36E60 (m_interpreter.dll). 
Access violation reading location 0x00000000A5CE3920.

我不知道从哪里开始...
编辑1:这是构造函数(还有一个静态构造函数):
    .method public hidebysig specialname rtspecialname 
        instance void  .ctor() cil managed
{
  // Code size       20 (0x14)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
  IL_0006:  ldsfld     class [mscorlib]System.Exception Test.TestMethods::ex_
  IL_000b:  brfalse.s  IL_0013
  IL_000d:  ldsfld     class [mscorlib]System.Exception Test.TestMethods::ex_
  IL_0012:  throw
  IL_0013:  ret
} // end of method TestMethods::.ctor

这是由Matlab编译器生成的函数。我可以尝试反汇编它。 - Dani
嗯,确保你已经将所有依赖项复制到当前工作目录中(例如,MWArray可能依赖于Matlab文件夹中存在的其他dll之一)。尝试复制所有dll并查看是否有所不同。 - Tejas Sharma
也尝试了TestNative Dll,但是结果一样。 - Dani
你尝试过http://ilnumerics.net吗?自从那时起,我再也没有碰过整个Matlab编译器的东西,只使用纯托管代码。没有继续折磨自己的理由...仅供参考。 - user492238
检查一下,但我希望能够从.NET运行Matlab... 这不可能那么难。 - Dani
显示剩余4条评论
1个回答

1

您不能从.NET 4.5程序集中调用由MATLAB生成的.NET库,同时在附加了VS调试器时会崩溃。


我的应用程序针对.NET Framework v4.6.1,它在实例化由MATLAB导出的类的新对象的点上崩溃。一旦我降级到.NET Framework v4.0,它就可以工作了。 - Rajaraman Subramanian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接