2014-02-07 91 views
1

我需要將.EXE與simulink集成。我試圖做的是在Simulink中創建一個C++ DLL。這個DLL稍後應該被包含在simulink中的S函數調用中。Simulink和DLL

信息流將是:

  1. Simulink中執行S-功能塊
  2. 此塊調用從C++ DLL的方法
  3. 的C++方法執行EXE,並返回我的結果
  4. 結果去所有的方式回到SIMULINK

PS:我沒有這個EXE文件的源代碼,這是一個BL ack框。這就是爲什麼我要創建一個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; } 
} 

,爲了生成可以在Matlab空調風格一起使用的DLL使用(外部的 「C」)命令I'm請注意。

當我嘗試加載DLL:

  • 調用LoadLibrary( 'MYDLL', 'myDLL.h')
  • libfunctions MathFuncsDll

「類lib.MathFuncsDll或否方法沒有類lib.MathFuncsDll「。

所以,我的問題是:

  1. 請告訴我錯了我的dll項目?
  2. 使用這種方法可以將exe與simulink集成嗎?

OBS:Similar question here

+2

除了C++錯誤:什麼是dll層的目的?我會從matlab的函數('system'-command)運行exe。 – Daniel

+0

嗯,有可能嗎?我不知道。我會谷歌它......無論如何,DLL層將被用於「翻譯」simulink輸入到EXE輸入。例如,EXE的所有輸入都是文本文件。我將不得不在每個模擬步驟中創建新的文本文件 – guilhermecgs

+0

爲什麼要把它放在課堂上?這不會讓你難過嗎? –

回答

1

我沒有解決DLL錯誤,但你原來的運行從Simulink中的exe的問題。

  1. 爲什麼不直接從MATALB代碼使用system命令像丹尼爾表明運行exe?

  2. 如果你寫一個C++的S-功能,其界面更容易實現,並且可以調用從C++ S函數的exe文件。即,而不是您的DLL,您將使用C++ s函數作爲Simulink和您的exe之間的接口。