stack damaged...

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Denis Sartakov
1898
Denis Sartakov  

 такая вот, друзья история:

имею с++ DLL, в ней такая вот функция:

//+------------------------------------------------------------------+
        static EXPFUNC void __stdcall WriteMasterOrder(wchar_t*  pt_Symbol,
                                                       int       i_OrderType, //OP_BUY/OP_SELL/E_NO_ORDER
                                                       double    d_Lots,
                                                       int       i_Ticket,
                                                       double    d_Profit,
                                                       int       i_OpenTime,
                                                       int       i_CloseTime
                                                       );
//+------------------------------------------------------------------+
void __stdcall cSharedMemory::WriteMasterOrder(wchar_t*  pt_Symbol,
                                               int       i_OrderType, //OP_BUY/OP_SELL/E_NO_ORDER
                                               double    d_Lots,
                                               int       i_Ticket,
                                               double    d_Profit,
                                               int       i_OpenTime,
                                               int       i_CloseTime
                                             )
{
        WaitForSingleObject(gh_Mutex,INFINITE);

        wcscpy(gpk_SharedMem->pt_MasterSymbol,pt_Symbol);
        gpk_SharedMem->i_MasterOrderType = i_OrderType;
        gpk_SharedMem->d_MasterLots      = d_Lots;
        gpk_SharedMem->i_MasterTicket    = i_Ticket;
        gpk_SharedMem->d_MasterProfit    = d_Profit;
        gpk_SharedMem->i_MasterOpenTime  = i_OpenTime;
        gpk_SharedMem->i_MasterCloseTime = i_CloseTime;

        ReleaseMutex(gh_Mutex);
}

в mql4 имею такое вот описание для этой функции:

void WriteMasterOrder(string& pt_Symbol,
                     int       i_OrderType, //OP_BUY/OP_SELL/E_NO_ORDER
                     double    d_Lots,
                     int       i_Ticket,
                     double    d_Profit,
                     datetime  dt_OpenTime,
                     datetime  dt_CloseTime
                     );
//+------------------------------------------------------------------+

вот так эта функция вызывается:

   StringInit(mk_MasterOrder.s_Symbol,50);
   mk_MasterOrder.s_Symbol     = Symbol();
   mk_MasterOrder.i_OrderType  = E_NO_ORDER;
   mk_MasterOrder.d_Lots       = 0.1;
   mk_MasterOrder.i_Ticket     = 0;
   mk_MasterOrder.d_Profit     = 0;
   mk_MasterOrder.dt_OpenTime  = 0;
   mk_MasterOrder.dt_CloseTime = 0;
   
   SharedMemoryDLL::WriteMasterOrder(mk_MasterOrder.s_Symbol,
                                     mk_MasterOrder.i_OrderType, //OP_BUY/OP_SELL/E_NO_ORDER
                                     mk_MasterOrder.d_Lots,
                                     mk_MasterOrder.i_Ticket,
                                     mk_MasterOrder.d_Profit,
                                     mk_MasterOrder.dt_OpenTime,
                                     mk_MasterOrder.dt_CloseTime
                                    );

но в мт4 получаю вот это:

stack damaged...

хоть ты тресни !

можете что-то посоветовать ?

TheXpert
18276
TheXpert  

Ссылка на строку насколько я помню на стороне длл выглядит как указатель на структуру а не на w_char.

Замените строку на буфер с заданием размера либо разберитесь как правильно работать со строкой.

Скорее всего проблема в этом. Но не факт конечно.

Denis Sartakov
1898
Denis Sartakov  
Комбинатор:

Ссылка на строку насколько я помню на стороне длл выглядит как указатель на структуру а не на w_char.

Замените строку на буфер с заданием размера либо разберитесь как правильно работать со строкой.

Скорее всего проблема в этом. Но не факт конечно.


спасибо, друг,

дело вот в чем оказалось - всегда думал, что datetime тип это обычный int тип,

но просчитался, оказалось datetime  имеет длинк 8 байтов,

т.е. в с++ надо было олбъявлять не int, а __int64 ...

поправил, все в порядке теперь...

Alexey Volchanskiy
27272
Alexey Volchanskiy  
Denis Sartakov:


спасибо, друг,

дело вот в чем оказалось - всегда думал, что datetime тип это обычный int тип,

но просчитался, оказалось datetime  имеет длинк 8 байтов,

т.е. в с++ надо было олбъявлять не int, а __int64 ...

поправил, все в порядке теперь...


Это в старом MQL4 было 4 байта, теперь и там 8. А точность так и осталась 1 сек ((

Вот тут пример еть, ну вы наверняка сами знаете \MQL4\Scripts\Examples\DLL\.. 

Denis Sartakov
1898
Denis Sartakov  
Alexey Volchanskiy:


Это в старом MQL4 было 4 байта, теперь и там 8. А точность так и осталась 1 сек ((

Вот тут пример еть, ну вы наверняка сами знаете \MQL4\Scripts\Examples\DLL\.. 


да, да, спасибо, друг...
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий