Как вызвать простую функцию MATLAB в DLL, сгенерированной MATLAB из C #

1

Проблемы с построением DLL из MATLAB и вызовом его функций из С#

Здесь функция MATLAB

function [success_code] = ENGINE_PING()
  success_code = 42;  
end

Здесь сгенерированный заголовок C++

extern LIB_ENGINE_C_API  
bool MW_CALL_CONV mlxENGINE_PING(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]);

Мой вопрос состоит из двух частей: что такое выражение PInvoke, которое я должен использовать? и как я могу сортировать значения для передачи и возврата значений?

Я уменьшил это до простого примера, о котором я могу думать - я не могу использовать MATLAB.NET Builder и т.д. По причинам лицензирования.

Я очень хотел бы помочь в этом.

Благодарю!

Теги:
dll

1 ответ

0

1-я часть:

[DllImport(@"mclmcrrt7_17.dll", EntryPoint = "mclInitializeApplication_proxy", CallingConvention = CallingConvention.Cdecl)]
private static extern bool mclInitializeApplication(string options, Int32 count);
[DllImport(@"mclmcrrt7_17.dll", EntryPoint = "mclTerminateApplication_proxy", CallingConvention = CallingConvention.Cdecl)]
private static extern void mclTerminateApplication();  
[DllImport("libmcc.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern bool _mlfCreat_smallsample (int nargout, ref IntPtr sample);

2-я часть: (лучше быть обернутым в функцию)

IntPtr num_ptr = MxCreateDoubleScalar((double)number);
IntPtr return_ptr = IntPtr.Zero;
double[] ans = new double[1];
_mlfFcn_add(1, ref return_ptr, sample, num_ptr);
Marshal.Copy(MxGetPr(return_ptr), ans, 0, 1);
return ans[0].ToString();

[DllImport(@"libmx.dll", CallingConvention = CallingConvention.Cdecl)]
rivate static extern IntPtr mxGetPr([In]IntPtr mxArray);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню