MT -> DLL1 -> DLL2 -> 126

 

Мне необходимо организовать связь между 2я dll-ками и терминалом МТ. Из эксперта в МТ вызываются функции 1ой dllки, а та в свою очередь вызывает функуии 2ой dllки. Но даже простая организация такой цепочки (последовательный вызовов функции без параметров сначала из терминала затем из 1ой dllки) выдаёт ошибку 126 (мол неможет загрузить dllку №1). Если из dllки №1 убрать вызов функции dllки №2 то 1ая dllка загружается нормально. Между dll1 и dll2 организовано статическое связывание, работоспособность которого была проверена через специальнонаписанное хостовое приложение, т.е. через хостовое приложение, не являющиеся МТ терминалом, цепочка: exe -> dll1 -> dll2 работает нормально. Ниже привожу исходники простенького примера такой цепочки в результате работы которой выдаёт ошибку 126.


Советник:


#import "pDL.dll"
int DE();
#import

int init()
{
//----
DE();
//----
return(0);
}

int deinit()
{
return(0);
}

int start()
{
return(0);
}
//+------------------------------------------------------------------+


DLL №1


CPPшник:


//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#include "DL.h"
#include "DL1.h"
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------

int __stdcall DE()
{
return(DE1());
}


.H файл:


extern "C" __stdcall int __declspec(dllexport) DE();


DLL №2


CPPшник:


//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#include "DL1.h"
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------

int __stdcall DE1()
{
return(777);
}


.H файл:


extern "C" __stdcall int __declspec(dllexport) DE1();




Dllки написаны в Borland C++ Builder v6.0 (build 10.166)

Эксперт запускался в TT v4.0 (build 215)

Dllки ложу в <дериктория терминала>\experts\libraries\


Большая просьба ответить тем кто знает из за чего эта ошибка

 
paketa:

...

Эксперт запускался в TT v4.0 (build 215)

Dllки ложу в <дериктория терминала>\experts\libraries\


Большая просьба ответить тем кто знает из за чего эта ошибка


DLL №1 оставляете в <дериктории терминала>\experts\libraries\, а DLL №2, которую вызывает первая, помещаете

в системную папку: C:\Windows\system32\.

 
Только что столкнулся с такой проблемой, но записывать в папку C:\Windows\system32\ не позволяют права. Альтернативный выход - положить dll в корневую папку MT4, где находится terminal.exe.
 

Вместо статического связывания можно пользоваться
динамическим- оно не сильно сложнее,
но длль можно будет размещать где угодно.

Причина обращения: