WPF应用程序调用MATLAB编译生成的DLL动态链接库 - 测试记录
新的运动学解算最初是在MATLAB上编写,方便绘图进行测试和验证。其中的线性代数运算转为C较为麻烦,故先进行MATLAB编译DLL,并由WPF调用的测试,验证WPF上位机直接调用从MATLAB代码编译DLL的可行性。
MATLAB编译dll
参考:https://blog.csdn.net/weixin_39559414/article/details/95059135
引用dll
引用MATLAB编译生成的dll以及编译该dll对应版本的MATLAB的MWArray.dll,否则会报错:MWArray的版本号不对。
编译WPF程序
1、编译报错,无法加载“mclmcrrt9_8.dll”:
解决方法:需要到matlab官网下载相应版本的MCR (https://ww2.mathworks.cn/products/compiler/matlab-runtime.html)
2、编译报错,各种奇怪的异常:
解决方法:将VS编译环境修改为x64即可
WPF程序运行测试
WPF前端XAML代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<Window x:Class="MatlabTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MatlabTest"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<StackPanel Orientation="Vertical">
<RichTextBox x:Name="textBox" Height="300" Margin="10"/>
<Button x:Name="myButton" Click="myButton_Click" Height="30" Width="100" Content="测试"/>
</StackPanel>
</Grid>
</Window>
|
后端功能逻辑C#代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
using System.Windows;
using MathWorks;
using MathWorks.MATLAB;
using MathWorks.MATLAB.NET;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using C01_Leg_IK_201207_Compile_Test;
namespace MatlabTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
C01_Leg_IK_201207_Compile_Test.Class1 matdll =
new C01_Leg_IK_201207_Compile_Test.Class1();
private void myButton_Click(object sender, RoutedEventArgs e)
{
MWArray a = 50, b = 100, c = "F";
MWArray[] input = new MWArray[] { a, b, c };
MWArray[] output = new MWArray[1];
matdll.C01_Leg_IK_201207_Compile_Test(1, ref output, input);
textBox.AppendText("计算得Motor2的角度为 " + output[0].ToString() + "\n");
}
}
}
|
成功运行后效果如图:
结论
WPF成功调用MATLAB编译生成的DLL。不过在未安装MCR的电脑上运行程序会没有响应,故想运行调用了MATLAB生成的DLL的WPF应用程序,则必须现在电脑上安装MCR,这对用户来说体验不好。故建议还是使用C编译生成的DLL来做进一步测试。
文章作者
Single Long
上次更新
2020-12-07
(818cfd8)
Create Note_CSharp_Call_Matlab_DLL.md
许可协议
CC BY-NC-ND 4.0