您现在的位置是:首页 >其他 >C# 调用Matlab打包的 DLL文件(傻瓜式操作)网站首页其他
C# 调用Matlab打包的 DLL文件(傻瓜式操作)
1、准备Matlab代码
2. 打包
-
在matlab命令行窗口输入
deploytool
,打开MATLAB Complier,选择Library Compiler
-
在TYPE中选择
.NET Assembly
;在EXPORTED FUNCTIONS中选择要打包的文件;可以选择为自己打包的文件自定义NameSpace名称,本例中将NameSpace定义为JudgeByCC
,然后选择Package
即可。稍等一会,即可看到打包后的文件。 -
-
打包结束后,会自动打开输出文件的目录,如下图所示,打开
for_redistribution_files_only
文件夹,即可看到打包好的dll文件。
3. 新建C# 控制台项目
- 在Virual Studio中新建C#控制台项目
- 项目建好后,首先在主函数里面打印一句
Hello World!
,确保新建的项目能正常运行。
4. 配置
- 双击项目的
Properties
或者右键项目,选择属性
,选择引用路径
,添加自己打包好的dll文件和Matlab中MWArray.dll
的文件目录,然后记得按Ctrl+s
进行保存。
- 右键
引用
,选择添加引用
,打开引用管理器。
- 在引用管理器中选择自己打包的DLL文件和MWArray,然后点击确定。 至此,C#项目配置的环境就结束了。
5. 编写测试代码并运行
- 编写测试代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using JudgeByCC;
using MathWorks.MATLAB.NET.Arrays;
namespace ConsoleApp5
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
JudgeByCC.Class1 class1 = new JudgeByCC.Class1();
// 只显示部分数据
double[] array = { 1.1965, -0.548, 0.0155, 0.317, -3.462, 1.5475, 2.1625, 2.14, 0.733, 1.2965, -3.7535 };
MWNumericArray myArray = new MWNumericArray(array); // double数组转为MWArray类型数组
MWArray[] dpsdo = new MWArray[1];
dpsdo[0] = 12;
// 测试运行效率
for(int i=0; i < 10000; i++)
{
Console.WriteLine(class1.main_entrance_JudgeByCC(myArray, dpsdo[0]));
Console.WriteLine("代码执行成功!" + i);
}
Console.WriteLine("代码执行成功!");
}
}
}
- 运行
可能会遇到的问题及解决方案
未经处理的异常: System.TypeInitializationException: “JudgeByCC.Class1”的类型初始值设定项引发异常。 —> System.TypeInitializationException: “MathWorks.MATLAB.NET.Utility.MWMCR”的类型初始值设定项引发异常。 —> System.TypeInitializationException: “MathWorks.MATLAB.NET.Arrays.MWArray”的类型初始值设定项引发异常。 —> System.BadImageFormatException: 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
在 MathWorks.MATLAB.NET.Arrays.MWArray.mclmcrInitialize2(Int32 primaryMode)
在 MathWorks.MATLAB.NET.Arrays.MWArray…cctor()
— 内部异常堆栈跟踪的结尾 —
在 MathWorks.MATLAB.NET.Utility.MWMCR…cctor()
— 内部异常堆栈跟踪的结尾 —
在 JudgeByCC.Class1…cctor()
— 内部异常堆栈跟踪的结尾 —
在 JudgeByCC.Class1…ctor()
在 ConsoleApp5.Program.Main(String[] args) 位置 F:VS_projectConsoleApp5Program.cs:行号 18
如果在代码运行时出现上图中的错误,如果确定自己的Matlab代码、打包、以及调用都没有问题,则有可能是自己电脑运行的目标平台环境不一致所导致的。具体修改方式如下:
解决方案:
- 右键 项目-> 选择“属性”
- 点击“生成”->“目标平台”
- 根据自己的运行环境选择合适的位数即可,笔者使用的是X64系统,故选择x64即可。然后按“ctrl+s”进行保存即可。再次运行,发现代码即可正常运行,至此,问题解决。