Я пытаюсь использовать Pinvoke для вызова функций Matlab из C#.Вызвать mexCallMATLAB с C#
Моя конфигурация проекта:
- C++ проект, который использует "mex.h" вызвать интерфейс "mexCallMATLAB"
Пример:
#include "stdafx.h"
#include <stdarg.h>
#include <string>
#include "matrix.h"
#include "mex.h"
extern "C" _declspec(dllexport) bool blockExists()
{
std::string blockPath = "model/myblockpath";
mxArray *pin[1];
int nin = 1;
mxArray *pout[1];
int nout = 1;
pin[0] = mxCreateString(blockPath.c_str());
if (mexCallMATLAB(nout, pout, nin, pin, "find_system") != 0) {
callStatus = false;
}
mxDestroyArray(pin[0]);
return callStatus;
}
- C# Proj ЭСТ, который использует PInvoke для вызова предыдущего C++ проект
Пример:
using System.Runtime.InteropServices;
namespace ManagedMatlabWrapper
{
public class MatlabWrapper
{
[DllImport(@"MatlabAPI.dll")]
private static extern bool blockExists();
public static bool blockExistsAPI()
{
bool result = blockExists();
return result;
}
}
}
Все компилирует ОК
Но когда я запускаю код, он дает мне ошибку DLL не найден исключения.
Я проверил DLL, сгенерированную с помощью хоста зависимостей, и показывает, что некоторые библиотеки Matlab не найдены. Если я изменю код и удалю любую ссылку на Matlab, Pinvoke будет работать нормально.
Кто-нибудь знает, Что не хватает? Что делать, чтобы вызвать mexCallMATLAB с C#?
Я боялся, что вы скажете это ... :-) После нескольких тестов я пришел к такому же выводу. О альтернативах, каково ваше мнение о скорости и совместимости MATLAB COM с Simulink (модели чтения, параметры настройки и т. Д.)? – guilhermecgs
Совместимость, не должно быть никаких проблем. Функция Feval в основном такая же, как mexCallMATLAB. Скорее, у меня недостаточно опыта, чтобы дать вам полезный ответ. – SCFrench