如果代码分离,MATLAB Engine API将永远运行

时间:2015-01-12 18:23:59

标签: matlab api

我正在尝试使用MetaTrader Terminal 4(MetaQuotes 的交易软件)通过引擎访问MATLAB

我使用DLL文件在MetaTrader和MATLAB之间进行通信。

在代码中,如果我将此代码放在一个函数中,它就可以工作。

但如果我将它分成两个不同的函数,它会永远运行/错误

#include "stdafx.h"

#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
#include <vector>
#include <windows.h>
#include <memory.h>

#include "engine.h"

using namespace std;

#define MT4_EXPFUNC __declspec(dllexport)

Engine  *pEng      = NULL;
mxArray *closev    = NULL;
double  *closevp   = NULL;
mxArray *getPArray = NULL;

MT4_EXPFUNC void InitEngine( int dummy )
{
    pEng = engOpen( NULL );
}

MT4_EXPFUNC void InitCloseBuffer( int size )
{
    closev = mxCreateDoubleMatrix( 1, size, mxREAL );
    if ( closev != NULL )
         closevp = mxGetPr( closev );

 // ------------------------------------------------------------------
 // the following code bugs when separated from the code above
 // and put in another function called right after this one

    engPutVariable( pEng, "closev",  closev );
    engEvalString(  pEng, "[mainNet] = PTrainInit();" );
    engEvalString(  pEng, "[hitrate, mainNet] = PTrain(mainNet, closev);" );

    engEvalString(  pEng, "outGetP = PGetPrediction(mainNet, closev)" );

    getPArray = engGetVariable( pEng, "outGetP" );

    double *p;
    if ( getPArray != NULL )
        p = mxGetPr( getPArray );

// end of the separated code
// -----------------------------------------------------------------
}

我需要将两个功能分开,因为我需要用值填充 closev

我做错了什么?

感谢

杰夫

1 个答案:

答案 0 :(得分:1)

好吧,我找到了答案:最初我做了一个独立的MATLAB项目,工作正常,但 closev 是列式的,并且在DLL {{1 是行式的。

此外,填充closev然后使用第二个分离的函数对内部函数的使用完全不同于未填充的closev

这两件事让它看起来很奇怪。但是。

很高兴我能让它发挥作用。

JfLB