Download MetaTrader 5

Reg: Critical error in calling a C/C++ DLL in updated MQL4

To add comments, please log in or register
amarsinghbishen
69
amarsinghbishen  

Hello,

I am calling a C/C++ Dll in an EA in updated MQL4. But i am getting critical error in calling that DLL.

But if call the same Dll in earlier version of MQL4, it is calling perfect.

Please Help me regarding this.

qjol
3243
qjol  

how should we know show the relevant code... using SRC



Play video
For large amount of code
attach the file.
amarsinghbishen
69
amarsinghbishen  

I am fetching from Database using C/C++ Dll and then importing it into EA in MQL4.

The EA code is as:

#import "SampleMSDBCon.dll"
int StoreIntoMSSQL(string ,string ,int ,string ,int ,int ,string,string);
bool is_Insertdb_connected();
#import

#import "ReadingSignalsFromDB.dll"
//int FetchSignalsFromMS(string ,string ,int,string);
int FetchSignalsFromMS(string ,string ,string);
bool is_Fetchdb_connected();
#import
int start
{

FetchFromDB();

}
void FetchFromDB()
{  
   //Signal = FetchSignalsFromMS( MSSymbName,Ea_name,elapsedSec,readProc);    
  
   Signal = FetchSignalsFromMS( MSSymbName,Ea_name,readProc);    
   Print("Signal = ", Signal);
   Print("elapsedSec = ", elapsedSec);
   
   if(Signal == 2)
   {
      Print("Operation = Sell");
      Print("fetching from DB successfull with RetCode1 = " ,Signal); 
      Print("symbolName = ",MSSymbName,"Ea_name = ",Ea_name,"readProc = ",readProc);          
   }
   else if(Signal == 1)
   {
      Print("Operation = Buy");
      Print("fetching from DB successfull with RetCode1 = " ,Signal); 
      Print("MSSymbName = ",MSSymbName,"Ea_name = ",Ea_name,"readProc = ",readProc);     
   }
   else
   {
      Print("fetching from DB failed with RetCode1 = " ,Signal);                   
   }  
}
As the calling of DLL is working fine in older version of MQL4; so as per me, the error is somewhere in C/C++ Dll but i am not sure on it. 
The DLL code is as follows:
int readSignalFromMSSQL(char *Symbol,char *Ea_name, char *pProcedure)
{
	HRESULT hr = S_OK ;
    _CommandPtr pCmd = NULL;
    _ConnectionPtr pConnection = NULL;
    _bstr_t strMessage, strAuthorID;

   	::CoInitialize(NULL);
	
    long codRet = -1;
	
	 _ParameterPtr ParReturn1; // 
     _ParameterPtr Par1; // SYMBOL
	 _ParameterPtr Par2; // Ea_name
	
	try 
	{
	  TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
	  hr = pConnection->Open("dsn=MS_DB;", "sa", "sql2012", adConnectUnspecified);
	  //hr = pConnection->Open("dsn=SimulatorDB;", "sa", "sql2012", adConnectUnspecified);
      pConnection->CursorLocation = adUseClient;
      TESTHR(pCmd.CreateInstance(__uuidof(Command)));
      pCmd->CommandText = pProcedure;  
      pCmd->CommandType = adCmdStoredProc;
      
	  ParReturn1 = pCmd->CreateParameter( _bstr_t("@signal"), adInteger , adParamOutput, 0, codRet);
	  pCmd->Parameters->Append( ParReturn1 );

      Par1 = pCmd->CreateParameter("@symbol",adChar, adParamInput, strlen(Symbol) , Symbol);
  	  pCmd->Parameters->Append(Par1);

	  Par2 = pCmd->CreateParameter("@eaname",adChar, adParamInput, strlen(Ea_name) , Ea_name );
   	  pCmd->Parameters->Append(Par2);	  
	  	 
	  pCmd->ActiveConnection = pConnection;
      hr = pCmd->Execute( 0, 0, adCmdStoredProc );	  

      if( FAILED(hr) )
      {
         codRet = -2;
      }
	  else
	  {
         ParReturn1 = pCmd->Parameters->GetItem(_bstr_t("@signal"));	//0
         codRet = ParReturn1->GetValue();
	  }
	}
	catch(_com_error ) 
	{
		codRet = -3;
	}
    if (pConnection)
      if (pConnection->State == adStateOpen)
         pConnection->Close();

   ::CoUninitialize();
	return((int)codRet);
}  
extern "C" __declspec(dllexport) int FetchSignalsFromMS(char *Symbol,char *Ea_name ,char *pProcedure)
{
	int  ccc  = readSignalFromMSSQL(Symbol,Ea_name,pProcedure);
	
	//char intStr[12];
	//itoa(ccc,intStr,10);	
	//char *strr = intStr+1 ;
	//int elapsedSec = atoi(strr);
	
	//int Signal = first(ccc);
	return(ccc) ; 
}
qjol
3243
qjol  
To add comments, please log in or register