目的:更大程度在Mathematica和Matlab间共享代码
1 使用c#编写dll
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace ToMATLAB
{
public class XDClass
{
//这是一个不带返回值的方法
public void Message()
{
MessageBox.Show("Here is Dot Net~");
}
//这是一个属性
public string Help
{
get
{
return "I am a Property of Class XDClass";
}
}
//这是一个带返回值的方法,利用海伦公式计算三角形面积
public double TriangleArea(double a,double b,double c)
{
double max = a;
if (max < b) max = b;
if (max < c) max = c;
if (2 * max >= a + b + c)
return -1;//不构成三角形
else
{
double p = (a + b + c) / 2;
return Math.Sqrt(p * (p - a) * (p - b) * (p - c));
}
}
}
}
2 编译dll
csc /out:ToMATLAB.dll /t:library ToMatlab.cs
3 在Matlab中调用test1.m
tic;
dir = cd;
asmInfo = NET.addAssembly([cd, '\ToMATLAB.dll'])
%methods ToMATLAB.XDClass
xd=ToMATLAB.XDClass();
xd.Help;
%xd.Message
xd.TriangleArea(3,4,5);
%xd.TriangleArea(3,4,1)
toc
4 在Mathematica中调用test1.nb
Needs["NETLink`"]
LoadNETAssembly["d:\\temp\\matlab_dlls\\netc\\ToMATLAB.dll"]
NETAssembly["ToMATLAB", 1]
LoadedNETAssemblies[]
{NETAssembly["mscorlib", 2], NETAssembly["InstallableNET", 3],
NETAssembly["Wolfram.NETLink", 4], NETAssembly["System", 5],
NETAssembly["System.Windows.Forms", 6],
NETAssembly["System.Drawing", 7], NETAssembly["ToMATLAB", 1]}
LoadedNETTypes[]
{}
xd = NETNew["ToMATLAB.XDClass", []]
xd@Help[]
"I am a Property of Class XDClass"
xd@TriangleArea[3, 4, 6]
5.33268