2014-02-28 39 views
2

我试图使用从MATLAB创建一个DLL文件与dotnetbuilder(http://www.mathworks.se/help/dotnetbuilder/ug/create-a-net-component-from-matlab-code.html)..使用.NET 2.0中的DLL .NET 4.5的项目(在调试vshost崩溃)

为了使用DLL,我必须添加一个名为'MWArray.dll'(http://www.mathworks.se/help/dotnetbuilder/ug/integrate-your-net-component-in-a-c-application.html)的matlab dll的参考,并且很遗憾,这个dll似乎只适用于.net 2.0。

我已经能够让我用从MATLAB创建的DLL一个简单的控制台应用程序的唯一途径,是通过执行以下操作:在MATLAB建设时

  • 目标的dll的.NET 2.0与 dotnetbuilder。
  • 变化.NET使用在我的控制台 应用程序的版本到2.0

如果我不这样做的版本,当我尝试运行该项目的控制台应用程序会崩溃vshost.exe。

我希望能够使用.net 4. +功能,所以配置项目使用.net 2.0是不可接受的。当我得到这个简单的控制台应用程序运行至少.net 4.0,我会试着让它在F#3.0应用程序中工作。

我的计划是这样的:

... 
using MathWorks.MATLAB.NET.Arrays; 
using makesquare; 

namespace Matlabski 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       var stuff = new makesquare.MLTestClass(); 
       var res = stuff.makesquare(1, 3); 
       Console.WriteLine(res[0]); 
       Console.WriteLine("sdfsdf"); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e); 
      } 
      Console.ReadKey(); 
     } 
    } 
} 

,我试图编辑app.config文件,以便能够同时处理.NET 2和4:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> 
    <supportedRuntime version="v2.0"/> 
    </startup> 
</configuration> 

但它不不工作..

是否有可能设置项目,使我可以同时使用.net 2.0和4.5,这将使我的项目工作?或者我必须做些别的使用这个恼人的.net 2.0 dll ..?

我使用:

  • VS2013
  • MATLAB R2013b(64位)
+0

为什么它会崩溃vshost?你是否附加了一个调试器,并且看到了什么异常?修复 – JaredPar

回答

3

解决了这个问题!

我编译功能的MATLAB针对.NET 4 ... 然后我加入

[assembly: MathWorks.MATLAB.NET.Utility.MWMCROption("-nojit")] 

的代码..

生成的代码如下所示:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using MathWorks.MATLAB.NET.Arrays; 
using makesquare; 
[assembly: MathWorks.MATLAB.NET.Utility.MWMCROption("-nojit")] 

namespace Matlabski 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       MLTestClass stuff = new MLTestClass(); 
       object[] res = stuff.makesquare(1, 3); 
       Console.WriteLine(res[0].ToString()); 
       Console.WriteLine("sdfsdf"); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e); 
      } 
      Console.ReadKey(); 
     } 
    } 
} 

app.config看起来像这样:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

但是,app.config似乎并不需要...

+0

可能是一件非常简单的事情非常感谢。我很久以来一直在努力解决这个问题,并最终为使用WMArray的.NET 2.0创建了一个单独的项目。 您是如何找到关于此特殊装配选项-nojit的信息的? – Mariusz

相关问题