我正在尝试使用MetaTrader Terminal 4(MetaQuotes metatrader4的交易软件)通过引擎访问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
。
我做错了什么?
感谢
杰夫
答案 0 :(得分:1)
closev
是列式的,并且在DLL {{1 是行式的。
此外,填充closev
然后使用第二个分离的函数对内部函数的使用完全不同于未填充的closev
。
这两件事让它看起来很奇怪。但是。
很高兴我能让它发挥作用。
JfLB