Мне нужно интегрировать .EXE с Simulink. Я пытаюсь сделать, это создать C ++ DLL в Simulink. Эта DLL должна быть позже включена в вызов S-функции в 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:
«Нет методов для класса lib.MathFuncsDll или нет класса lib.MathFuncsDll.»
Итак, мой вопрос:
набл: Подобный вопрос здесь
Чтобы дать несколько советов:
Вы хотите функцию Matlab s уровня 2, объясненную здесь: http://www.mathworks.de/de/help/simulink/sfg/writing-level-2-matlab-s-functions.html
Начните с msfuntmpl_basic.m
шаблон.
Вы можете полностью пропустить функции уровня 1, они существуют только для обратной совместимости.
Я не обращаюсь к ошибке dll, но ваша первоначальная проблема запуска exe из Simulink.
Почему бы не запустить exe-файл непосредственно из кода MATALB, используя system
команда, как предлагает Даниил?
Если вы пишете s-функцию C ++, ее интерфейс проще в реализации, и вы можете вызывать свой exe из s-функции C ++. Т.е. вместо вашей DLL вы будете использовать s ++-функцию C ++ в качестве интерфейса между Simulink и вашим exe-файлом.