Симулинк и DLL

Мне нужно интегрировать .EXE с Simulink. Я пытаюсь сделать, это создать C ++ DLL в Simulink. Эта DLL должна быть позже включена в вызов S-функции в simulink.

Поток информации будет:

  1. Simulink выполняет блок S-функции
  2. Этот блок вызывает метод из C ++ DLL
  3. Метод C ++ выполняет EXE и возвращает мне результат
  4. Результат возвращается к simulink

PS: У меня нет исходного кода EXE, и это черный ящик. Вот почему я создаю оболочку c ++, чтобы выполнить ее из simulink.

Пока что оболочка C ++ DLL не работает. Код ниже.

#ifdef MATHFUNCSDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport)
#else
#define MATHFUNCSDLL_API __declspec(dllimport)
#endif

#ifdef __cplusplus /* If this is a C++ compiler, use C linkage */
extern "C" {
#endif

namespace MathFuncs
{
// This class is exported from the MathFuncsDll.dll
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport)  double Add(double a, double b);
};
}

#ifdef __cplusplus /* If this is a C++ compiler, end C linkage */
}
#endif

* .cpp

#include "stdafx.h"#include <stdexcept>
#include "MathFuncsDll.h"using namespace std;
namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{  return a + b;   }
}

Обратите внимание, что я использую (extern «c») команду для генерации DLL, которую можно использовать в стиле Matlab C.

Когда я пытаюсь загрузить DLL:

  • loadlibrary (‘myDLL’, ‘myDLL.h’)
  • libfunctions MathFuncsDll

«Нет методов для класса lib.MathFuncsDll или нет класса lib.MathFuncsDll.»

Итак, мой вопрос:

  1. Что не так с моим проектом DLL?
  2. Можно ли интегрировать EXE с Simulink, используя этот подход?

набл: Подобный вопрос здесь

1

Решение

Чтобы дать несколько советов:

Вы хотите функцию Matlab s уровня 2, объясненную здесь: http://www.mathworks.de/de/help/simulink/sfg/writing-level-2-matlab-s-functions.html
Начните с msfuntmpl_basic.m шаблон.

Вы можете полностью пропустить функции уровня 1, они существуют только для обратной совместимости.

1

Другие решения

Я не обращаюсь к ошибке dll, но ваша первоначальная проблема запуска exe из Simulink.

  1. Почему бы не запустить exe-файл непосредственно из кода MATALB, используя system команда, как предлагает Даниил?

  2. Если вы пишете s-функцию C ++, ее интерфейс проще в реализации, и вы можете вызывать свой exe из s-функции C ++. Т.е. вместо вашей DLL вы будете использовать s ++-функцию C ++ в качестве интерфейса между Simulink и вашим exe-файлом.

1

По вопросам рекламы [email protected]