c#调用matlab制作的dll(挺简单的,看完记得点赞哦)

1 篇文章 0 订阅

工具版本:VS2015,Matlab2016b

一、安装MCRInstaller

安装包的位置就在matlab的安装目录下,如我的(D:\Program Files\MATLAB\R2016b\toolbox\compiler\deploy\win64)

双击MCRInstaller.exe按照步骤一步步安装即可

此安装包主要是用于matlab打包文件所用。

二、编写matlab函数文件MySmooth.m

function result=MySmooth(data,sigma)
result = smooth3(data,'box',sigma);
end

此函数作用是对三维数据进行平滑,result中是平滑后得到的数据

三、用matlab将函数打包为C#可调用的dll文件

 1、打开Library Compiler

2、选择指定项、添加自己的.m文件(如果有多个.m文件,在第二步全部添加即可)、修改类名(可改可不改,c#中调用时会用)

 

3、完成时的截图

4、选择保存路径后, 进入打包过程,等待完成即可

5、 生成dll文件

 

 四、用vs2015创建控制台应用,并引用两个dll文件,第一个即上一步生成的dll文件,我的是MySmooth.dll文件,路径你已经知道了,第二个文件是MWArray.dll(此文件的作用是c#与Matlab数据类型间的转换),路径是:D:\Program Files\MATLAB\R2016b\toolbox\dotnetbuilder\bin\win64\v2.0,你们类比下自己的即可。

using dosefromge;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MathWorks.MATLAB.NET.Arrays;//添加对MWArray的引用


namespace cCallMatlab
{
    class Program
    {
        static void Main(string[] args)
        {
            double[,,] list = new double[40, 40, 40]; //列向量
            Random r = new Random();
            for (int i = 0; i < 40; i++)
            {
                for (int j = 0; j < 40; j++)
                {
                    for (int x = 0; x < 40; x++)
                    {
                        list[i, j, x] = r.Next(100);
                    }
                }
            }

            MWArray array = new MWNumericArray(list);

            MySmooth.Smooth smooth = new MySmooth.Smooth();

            MWArray result = smooth.MySmooth(array, 3);
            double[,,] resultList = (double[,,])result.ToArray();

            Console.WriteLine(result.ToString());


            //DoseCalc doseCalc = new DoseCalc();
            //MWArray doseTest=doseCalc.main_gecalc();
            //double dose = double.Parse(doseTest.ToString());

            //Console.WriteLine("doseTest值:"+dose);
            Console.ReadKey(); //防止控制台直接结束
        }
    }
}

运行结果:

ps:说一下运行时踩过的坑:

1、程序直接报错:试图加载不正确的程序等,可能是因为x64或x86的原因,反正我的是因为这个

解决:

ps:如果电脑是32位的,只有matlab2015b以及之前的版本才有32位安装包。制作流程跟上述64位相同。vs环境要设置为x86(设置AnyCPU,首选32位也不行)

  • 13
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在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"的函数,接受两个数字参数并返回一个数字结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值