• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【转载】手把手教你用C#调用MATLAB函数 - GIS_Zhou

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

【转载】手把手教你用C#调用MATLAB函数

编译环境:Microsoft Visual Studio 2008
版本 9.0.21022.8 RTM
Microsoft .NET Framework
版本 3.5
安装的版本: Professional
Microsoft Visual Basic 2008   91986-031-5000002-60050
Microsoft Visual Basic 2008
Microsoft Visual C# 2008   91986-031-5000002-60050
Microsoft Visual C# 2008
Microsoft Visual C++ 2008   91986-031-5000002-60050
Microsoft Visual C++ 2008
Microsoft Visual Studio 2008 Tools for Office   91986-031-5000002-60050
Microsoft Visual Studio 2008 Tools for Office
Microsoft Visual Web Developer 2008   91986-031-5000002-60050
Microsoft Visual Web Developer 2008
Crystal Reports    AAJ6G-K0MSA4K-680002Z
Crystal Reports Basic for Visual Studio 2008

Matlab 2008b
首先需要做的工作是matlab编译器的设置,设置方法为:在Command window中输入mbuild -setup显示如下
>> mbuild -setup
Please choose your compiler for building standalone MATLAB applications:

Would you like mbuild to locate installed compilers [y]/n? n    %选择n
Select a compiler:
[1] Lcc-win32 C 2.4.1
[2] Microsoft Visual C++ 6.0
[3] Microsoft Visual C++ .NET 2003
[4] Microsoft Visual C++ 2005
[5] Microsoft Visual C++ 2005 Express Edition
[6] Microsoft Visual C++ 2008

[0] None
Compiler: 6                             %选择6,其他编译器可以选相应的选项,我没有验证过
The default location for Microsoft Visual C++ 2008 compilers is C:\Program Files\Microsoft Visual Studio 9.0,
but that directory does not exist on this machine.

Use C:\Program Files\Microsoft Visual Studio 9.0 anyway [y]/n? n%选择n
Please enter the location of your compiler: [C:\Program Files\Microsoft Visual Studio 9.0] D:\Program Files\Microsoft Visual Studio 9.0 %选择您自己的当前安装路径
Please verify your choices:

Compiler: Microsoft Visual C++ 2008
Location: D:\Program Files\Microsoft Visual Studio 9.0

Are these correct [y]/n? y  %看上述信息,如果正确选择y
****************************************************************************
  Warning: Applications/components generated using Microsoft Visual Studio  
           2008 require that the Microsoft Visual Studio 2008 run-time      
           libraries be available on the computer used for deployment.      
           To redistribute your applications/components, be sure that the   
           deployment machine has these run-time libraries.                 
****************************************************************************

Trying to update options file: C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R2008b\compopts.bat
From template:              D:\PROGRA~1\MATLAB\R2008b\bin\win32\mbuildopts\msvc90compp.bat

Done . . .
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%至次编译器设置完成%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在matlab的Command window中输入:
>> deploytool
Matlab产生deployment tool配置窗口



单击新建按钮,新建工程------>选择MATLAB Builder NE 选项卡----->选择.NET Component并添加工程名eaqual(测试用名,其实工程名称就是你导入C#后的命名空间名称,Matlab会在当前工作目录中新建文件夹文件夹名既为equal)---->点击ADD File按钮将你需要编译的MATLAB函数添加进当前工程,我这里导入的是 D:\Program Files\MATLAB\R2008b\toolbox\aero\aero\angle2quat.m文件---->点击build.
deployment tool output 窗口输出以下信息:
Build output( 2009-03-28 15:32:55).

[url=matlab:mcc%20-F%20%27E:%5CMATLAB%5Ceaqual.prj%27]mcc -F \'E:\MATLAB\eaqual.prj\'[/url]
等待...................................有点久
当输出以下信息时编译成功了

Compiler version: 4.9 (R2008b) Warning: Duplicate directory name: E:\MATLAB. mcc -W \'dotnet:eaqual,Eaqual,0.0,private\' -d \'E:\MATLAB\eaqual\src\' -T \'link:lib\' -v \'class{Eaqual:\Program Files\MATLAB\R2008b\toolbox\aero\aero\angle2quat.m}\' Warning: Name is nonexistent or not a directory: D:\Program Files\MATLAB\R2008b\toolbox\compiler\patch. Warning: Name is nonexistent or not a directory: D:\Program Files\MATLAB\R2008b\toolbox\compiler\patch. Processing D:\Program Files\MATLAB\R2008b\toolbox\aero\mcc.enc Processing D:\Program Files\MATLAB\R2008b\toolbox\matlab\mcc.enc Processing include files... 2 item(s) added. Processing directories installed with MCR... The file E:\MATLAB\eaqual\src\mccExcludedFiles.log contains a list of functions excluded from the CTF archive. 2 item(s) added. Generating MATLAB path for the compiled application... Created 40 path items. Begin validation of MEX files: Sat Mar 28 15:35:11 2009 End validation of MEX files: Sat Mar 28 15:35:11 2009 Warning: Name is nonexistent or not a directory: D:\Program Files\MATLAB\R2008b\toolbox\compiler\patch. Deleting 0 temporary MEX authorization files. Parsing file "D:\Program Files\MATLAB\R2008b\toolbox\aero\aero\angle2quat.m" (Referenced from: "Compiler Command Line"). Parsing file "D:\Program Files\MATLAB\R2008b\toolbox\compiler\deploy\deployprint.m" (Referenced from: "Compiler Command Line"). Parsing file "D:\Program Files\MATLAB\R2008b\toolbox\compiler\deploy\printdlg.m" (Referenced from: "Compiler Command Line"). Generating file "E:\MATLAB\eaqual\src\Eaqual.cs". Generating file "E:\MATLAB\eaqual\src\EaqualNative.cs". Generating file "E:\MATLAB\eaqual\src\readme.txt". Generating file "E:\MATLAB\eaqual\src\dotnet_mcc_component_data.cs". Executing command: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /nologo /optimize /doc:"E:\MATLAB\eaqual\src\eaqual.xml" /t:library /r:"D:\Program Files\MATLAB\R2008b\toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll" /resource:"E:\MATLAB\eaqual\src\eaqual.ctf" /out:"E:\MATLAB\eaqual\src\eaqual.dll" "E:\MATLAB\eaqual\src\Eaqual.cs" "E:\MATLAB\eaqual\src\dotnet_mcc_component_data.cs" Executing command: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /nologo /optimize /doc:"E:\MATLAB\eaqual\src\eaqualNative.xml" /t:library /r:"D:\Program Files\MATLAB\R2008b\toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll" /resource:"E:\MATLAB\eaqual\src\eaqual.ctf" /out:"E:\MATLAB\eaqual\src\eaqualNative.dll" "E:\MATLAB\eaqual\src\EaqualNative.cs" "E:\MATLAB\eaqual\src\dotnet_mcc_component_data.cs"   
Copying: E:\MATLAB\eaqual\src\eaqual.dll -> E:\MATLAB\eaqual\distrib
Copying: E:\MATLAB\eaqual\src\eaqualNative.dll -> E:\MATLAB\eaqual\distrib
Copying: E:\MATLAB\eaqual\src\readme.txt -> E:\MATLAB\eaqual\distrib
Compilation completed succesfully. The output is located in E:\MATLAB\eaqual\distrib.
You can package the component by clicking on the "ackage" icon in the Deployment Tool toolbar, or by clicking the Tools->ackage menu when the Deployment Tool panel is selected. To include additional files in the package, click Project->Settings).


生成的文件在工程文件夹里面
我的是  E:\MATLAB\eaqual\distrib\angle2quat.dll
至此MATLAB的操作全部完成

打开VISUAL Studio 2008新建C#工程我这里用的是控制台名为TestOfmatlab_consolt
我的是  E:\Visual Studio 2008\Projects\TEST\TestOfmatlab_consolt
添加引用E:\MATLAB\eaqual\distrib\angle2quat.dll
和D:\Program Files\MATLAB\R2008b\toolbox\dotnetbuilder\bin\win32\v2.0\MWArray.dll
(这里我没有用MATLAB画图,所以只引用MWArray.dll)
加入命名空间:
using MathWorks.MATLAB.NET.Arrays;
将下面代码加入Main函数
            eaqual.Eaqual eq=new eaqual.Eaqual();
            MathWorks.MATLAB.NET.Arrays.MWArray m=10,n=4,j=7,k;

           
             MWArray S = "XYZ";

            k = eq.angle2quat((MWNumericArray)m, (MWNumericArray)n, (MWNumericArray)j,

                               (MWCharArray)S);
            MWNumericArray temp = (MWNumericArray)k;
            double[,] location = (double[,])temp.ToArray(MWArrayComponent.Real);
            Console.WriteLine(location[0,0].ToString());
            Console.WriteLine(location[0,1].ToString());
            Console.WriteLine(k[2].ToString());
            Console.WriteLine(k[3].ToString());
            Console.WriteLine(k[4].ToString());
            Console.ReadLine();


编译运行即可看到输出,此函数是姿态角转四元数函数,具体功能就不做说明了。这个例子输入输出参数转换关系都有,大家自己看看就明白了


文件源代码:C#工程源码
由于工程文件过大就只把主函数源码传上来了!

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi与汇编发布时间:2022-07-18
下一篇:
DelphiTRichEdit加载word内容发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap