Simulink和DLL

时间:2014-02-07 19:29:23

标签: c++ c matlab dll simulink

我需要将.EXE与simulink集成。我想做的是在Simulink中创建一个C ++ DLL。此DLL稍后应合并到simulink中的S-Function调用中。

信息流将是:

  1. Simulink执行S功能块
  2. 此块从C ++ DLL
  3. 调用方法
  4. C ++方法执行EXE,并返回结果
  5. 结果一直回到simulink
  6. 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。”

    所以,我的问题是:

    1. 我的dll项目有什么问题?
    2. 是否可以使用此方法将exe与simulink集成?
    3. obs:Similar question here

2 个答案:

答案 0 :(得分:1)

我没有解决dll错误,但是你从Simulink运行exe的原始问题。

  1. 为什么不使用像Daniel建议的system命令直接从MATALB代码运行exe?

  2. 如果你编写一个C ++函数,它的界面更容易实现,你可以从C ++函数调用你的exe。即,您将使用C ++ s函数作为Simulink和您的exe之间的接口,而不是您的DLL。

答案 1 :(得分:1)

提供一些提示:

你想要一个2级matlab功能,在这里解释:http://www.mathworks.de/de/help/simulink/sfg/writing-level-2-matlab-s-functions.htmlmsfuntmpl_basic.m模板开始。

您可以完全跳过1级功能,它们仅用于向后分隔。