I am trying to pass a C# object array to a Matlab method using parameter array params
keyword. My Matlab method is complied to a .net assembly Dll. Here is my simple c# method:
public void Method1(params object[] objArg)
{
_mMExt.mMethod1((MWArray[])objArg);
}
I am using varargin
as input for my Matlab function mMethod1:
function mMethod1(varargin)
nVarargs = length(varargin);
end
The issue is when I am converting object[] to MWArray[] by doing this:
(MWArray[])objArg
It seems that I can use (MWArray)object1 to convert C# object to MWArray, but it doesn't let me to convert an array of object to an array of MWArray.
Is this possible? if so, how?
Thanks in advance.
Here is small example I tested.
Say you compiled the following MATLAB function into a .NET assembly using the MATLAB Compiler SDK:
function myFunction(varargin)
for i=1:nargin
disp(varargin{i});
end
end
Now in your C# program, you can simply call the function myLib.myClass.myFunction
by passing it a variable number of input arguments like this:
using System;
using MathWorks.MATLAB.NET.Arrays;
using MathWorks.MATLAB.NET.Utility;
using myLib;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("calling myFunction(varargin)...");
CallMyFunction(1, 2.0f, 3.14, "str4");
}
static void CallMyFunction(params MWArray[] varargin) // or object[]
{
myClass obj = new myClass();
obj.myFunction(varargin);
}
}
This is equivalent to explicitly writing:
MWArray[] varargin = new MWArray[4];
varargin[0] = new MWNumericArray(1);
varargin[1] = new MWNumericArray(2.0f);
varargin[2] = new MWNumericArray(3.14);
varargin[3] = new MWCharArray("str4");
myClass obj = new myClass();
obj.myFunction(varargin);