C#调用Matlab引擎详细方法以及注意事项

一、添加dll
在这里插入图片描述
二、直接运行Matlab语句

		    MLApp.MLApp matlab = null;
            Type matlabAppType = System.Type.GetTypeFromProgID("Matlab.Application");
            matlab = System.Activator.CreateInstance(matlabAppType) as MLApp.MLApp;
            string command;
            command = "t=2:0.2:4*pi;y=sin(t);h = plot(t,y)";
            String path = Directory.GetCurrentDirectory();//获取当前路径
            matlab.Visible = 0;
            matlab.Execute(command);
            command = @"print(gcf,   '-djpeg',   '" + path + "\\Test1');close all";//保存图片
            matlab.Execute(command);

三、C#调用.m文件
1、MATLAB函数如下

function s  = add( n )

% calculate the sum of 1..n

s = 0;

for i = 1:n

s = s + i;

end

2、C#代码如下:

			MLApp.MLApp matlab = null;
            Type matlabAppType = System.Type.GetTypeFromProgID("Matlab.Application");
            matlab = System.Activator.CreateInstance(matlabAppType) as MLApp.MLApp;

            string path_project = @"C:\Users\pll\Desktop\Matlab";		//自定义matlab工作路径    
            //string path_project = Directory.GetCurrentDirectory();    //工程文件的路径,如bin下面的debug
            string path_matlab = "cd('" + path_project + "')";          
            matlab.Execute(path_matlab);

            matlab.Execute("clear all");
            string command;

            command = @"s=Add(10)";
            matlab.Execute(command);
            try
            {

                var result = matlab.GetVariable("s", "base");//获取结果,就是传入base字符串,而不是其他的。
                                                      
                Console.WriteLine("result:" + result);
            }
            catch (Exception)
            {

                throw;
            }

四、注意事项
1、MATLAB文件命名不能是数字开头。
2、在向MATLAB传递字符串时,记得加单引号。
3、matlab.Execute(command),command相当于在命令窗口内容,“clear all”就是保证现在MATLAB内的变量不会影响之后的操作,但是要记得利用这个方法进行c#与MATLAB传参时,只能用标量,不能涉及到数组和矩阵,否则会报错;
4、调用的是MATLAB文件名,和函数名没有关系。
在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在C#调用MATLAB封装的DLL,需要以下步骤: 1. 在MATLAB中编写并编译DLL,确保它可以在MATLAB中正常运行。可以使用命令行函数“mcc”来编译MATLAB代码并生成DLL。 2. 在C#项目中添加对生成的DLL的引用。右键单击项目,选择“添加引用”,然后浏览到DLL文件并选择它。 3. 在C#代码中引入相关的命名空间,如“MathWorks.MATLAB.NET.Arrays”、“MathWorks.MATLAB.NET.Utility”和“MathWorks.MATLAB.NET.ComponentRuntime”。 4. 创建MATLAB的COM对象或.NET程序集对象,并使用它们来调用DLL中的函数。可以使用“Type.GetTypeFromProgID”函数来创建COM对象,或使用“Assembly.LoadFile”函数来加载.NET程序集对象。 5. 调用DLL中的函数并处理返回值。可以使用“MLArray”类来处理从DLL返回的MATLAB数组。 下面是一个示例代码,演示如何在C#调用MATLAB封装的DLL: ```csharp using System; using MathWorks.MATLAB.NET.Arrays; using MathWorks.MATLAB.NET.Utility; using MathWorks.MATLAB.NET.ComponentRuntime; namespace MyNamespace { class MyClass { static void Main(string[] args) { // Create MATLAB COM object Type matlabType = Type.GetTypeFromProgID("Matlab.Application"); dynamic matlab = Activator.CreateInstance(matlabType); // Load MATLAB-generated DLL AssemblyLoader loader = new AssemblyLoader(); loader.AddPath(@"C:\path\to\dll"); Assembly assembly = loader.Load("MyDLL"); // Call DLL function dynamic myFunction = assembly.CreateInstance("MyNamespace.MyClass"); MWArray result = myFunction.MyMethod(new MWNumericArray(1), new MWNumericArray(2)); // Process result double[] output = (double[])result.ToArray(typeof(double)); Console.WriteLine(output[0]); } } } ``` 这个例子假设你的DLL文件名为"MyDLL.dll",包含一个名为"MyClass"的类,其中有一个名为"MyMethod"的函数,接受两个数字参数并返回一个数字结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值