Calling a MATLAB function from C#

2020-01-30 08:04发布

问题:

I developed a MATLAB function, and I'm looking for a way to call that function from another C# application and pass some parameters to it and get the results in the C# program.

I heard that I can use Dynamic Data Exchange (DDE) or COM objects, but have can I do it?

回答1:

There is nice example in the MATLAB Central.

It shows three ways on how to communicate with MATLAB:

  1. COM
  2. MATLAB .NET Bulider
  3. MATLAB compiler

COM (I do not have any experience with it)

Cons: MATLAB is required to be installed on the target computer.

MATLAB .NET builder compiles your MATLAB code to the .NET assembly and you can use it directly.

Pros: MATLAB is not required to be installed on the target computer

Cons: It's expensive

MATLAB compiler compiles your MATLAB code into a C/C++ library or EXE file. You can use it through P/Invoke.

Pros: MATLAB is not required to be installed on the target computer

Cons: It's expensive, a lot of P/Invoke.



回答2:

There is a third option: delegates. Starting MATLAB -> load .NET assembly -> execute .NET function with delegate handle to a MATLAB function.



回答3:

There is a great example on this site on setting up everything. You can use MATLAB .NET deployment tool.

You need to

  • Install MCR (Matlab Compiler Runtime).
  • Deploy your Matlab function to .NET Assembly using Matlab Deploy Tool. This will create a .dll file.
  • Add .dll reference inside your .NET project.
  • Add reference to MATLAB.NET.

The advantage of this method is that the target machine does not require MATLAB to be installed, but on the downside the execution is quite expensive.