Simulink 和 DLL
Posted
技术标签:
【中文标题】Simulink 和 DLL【英文标题】:Simulink and DLLs 【发布时间】:2014-02-07 19:29:22 【问题描述】:我需要将 .EXE 与 simulink 集成。我想做的是在 Simulink 中创建一个 C++ DLL。此 DLL 稍后应合并到 simulink 中的 S-Function 调用中。
信息流是:
-
Simulink 执行 S-Function 模块
此块从 C++ DLL 调用方法
C++方法执行EXE,返回结果
结果一直返回到 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") 命令来生成可用于 Matlab C 风格的 DLL。
当我尝试加载 DLL 时:
loadlibrary('myDLL', 'myDLL.h') libfunctions MathFuncsDll“没有类 lib.MathFuncsDll 的方法或没有类 lib.MathFuncsDll。”
所以,我的问题是:
-
我的 dll 项目有什么问题?
是否可以使用这种方法将 exe 与 simulink 集成?
obs:Similar question here
【问题讨论】:
除了c++错误:dll层的目的是什么?我会从 matlab 的函数(system
-command)运行 exe。
嗯,有可能吗?我不知道。我会用谷歌搜索...无论如何,DLL 层将用于将 simulink 输入“转换”为 EXE 输入。例如,EXE 的所有输入都是文本文件。我必须在每个模拟步骤中创建新的文本文件
你为什么要把这个放在课堂上?这不会让你生活困难吗?
【参考方案1】:
给点建议:
你想要一个 2 级的 matlab 函数,在这里解释:http://www.mathworks.de/de/help/simulink/sfg/writing-level-2-matlab-s-functions.html
从msfuntmpl_basic.m
模板开始。
您完全可以跳过 level 1 的功能,它们只是为了向后兼容而存在。
【讨论】:
【参考方案2】:我不是在解决 dll 错误,而是您从 Simulink 运行 exe 的原始问题。
为什么不像 Daniel 建议的那样使用 system
命令直接从 MATALB 代码运行 exe?
如果你编写一个 C++ s-function,它的接口更容易实现,你可以从 C++ s-function 调用你的 exe。即,您将使用 C++ s-function 作为 Simulink 和您的 exe 之间的接口,而不是您的 DLL。
【讨论】:
以上是关于Simulink 和 DLL的主要内容,如果未能解决你的问题,请参考以下文章