Технический вопрос...

 

Такое вот дело, друзья, имею Window Server 2008, там конфигурация 64 бита.

устанавливаю ка положено для МТ4 свою Dll, сконфигурированную в Visual Studio 2010 как win32, в MQL4\Library\

получаю - код 126 - система не может найти мою DLL.

ладно, конфигурирую эту DLL в Visual Studio 2010 как x64,

теперь получаю код 193 - DLL не является программой win32,

т.е. делаю вывод, что модуль собственно находится, но грузиться не хочет...

Есть у кого-то какие-то намеки на решение этой незадачи ? 

 

Теоретически, МТ4 всегда х86, значит и DLL тоже должна быть х86.

/Libraries

Папка для хранения библиотек MQL5/MQL4.


DLL это не библиотека MQL5/MQL4
 
more:

Такое вот дело, друзья, имею Window Server 2008, там конфигурация 64 бита.

устанавливаю ка положено для МТ4 свою Dll, сконфигурированную в Visual Studio 2010 как win32, в MQL4\Library\

получаю - код 126 - система не может найти мою DLL.

ладно, конфигурирую эту DLL в Visual Studio 2010 как x64,

теперь получаю код 193 - DLL не является программой win32,

т.е. делаю вывод, что модуль собственно находится, но грузиться не хочет...

Есть у кого-то какие-то намеки на решение этой незадачи ? 

Речь идет об MFC? Если да, то можно читать дальше.

Библиотека должна быть именно 32-хбитная. Ошибка 126 свидетельствует о том, что терминал не может найти все DLL, на которые ссылается исходная библиотека. Таким образом, нужно либо включить в состав DLL все библиотеки, на которые она ссылается, либо положить в папку терминала недостающие библиотеки.

Решение для каждого из способов:

1. Включить в состав DLL. Компилировать проект в статической DLL. Свойства проекта - Свойства конфигурации - Использование MFC - Использовать MFC в статической библиотеке. 

2. Положить в папку недостающие библиотеки. Открыть DLL при помощи Dependency Walker и просмотреть, на какие DLL (из MFC) она ссылается. У меня, чаще всего, это: mfc100ud.dll, msvcp100d.dll и msvcr100d.dll. 

Dependency Walker (depends.exe) Home Page
  • www.dependencywalker.com
User definable module search paths with support for "KnownDLLs" and the "App Paths" registry keys. Search paths can be saved and loaded from within the graphical interface or from the command line.
 
Scriptong:

Речь идет об MFC? Если да, то можно читать дальше.

Библиотека должна быть именно 32-хбитная. Ошибка 126 свидетельствует о том, что терминал не может найти все DLL, на которые ссылается исходная библиотека. Таким образом, нужно либо включить в состав DLL все библиотеки, на которые она ссылается, либо положить в папку терминала недостающие библиотеки.

Решение для каждого из способов:

1. Включить в состав DLL. Компилировать проект в статической DLL. Свойства проекта - Свойства конфигурации - Использование MFC - Использовать MFC в статической библиотеке. 

2. Положить в папку недостающие библиотеки. Открыть DLL при помощи Dependency Walker и просмотреть, на какие DLL (из MFC) она ссылается. У меня, чаще всего, это: mfc100ud.dll, msvcp100d.dll и msvcr100d.dll. 

MFC не используется, ничего военного в этой DLL нет, всегда и везде она работала.

 Это DLL из моей статьи https://www.mql5.com/ru/articles/1361

Единственное, что может показаться необычным то, что она создает процесс в фоновом режиме(без консоли).

вот это место:

        ZeroMemory( &gk_Si, sizeof(gk_Si));
        gk_Si.cb = sizeof(gk_Si);
        ZeroMemory( &gk_Pi, sizeof(gk_Pi));

        // Start the child process that will Server/Clients 
        if( !CreateProcess( gt_ModuleName, // Module name 
                                                NULL,              // Command line
                                                NULL,              // Process handle not inheritable
                                                NULL,              // Thread handle not inheritable
                                                FALSE,             // Set handle inheritance to FALSE
                                                #if _DEBUG
                                                0,                                 // No any flags
                                                #else
                                                DETACHED_PROCESS,  // No console
                                                #endif
                                                NULL,              // Use parent's environment block
                                                NULL,              // Use parent's starting directory 
                                                &gk_Si,            // Pointer to STARTUPINFO structure
                                                &gk_Pi             // Pointer to PROCESS_INFORMATION structure
                                          )

 

 т.е., в этой OS Windows Server 2008 DataCebter может не быть этой Windows API CreateProcess ?

Советник MetaTrader 4 обменивается информацией с внешним миром - Статьи по MQL4
  • www.mql5.com
Советник MetaTrader 4 обменивается информацией с внешним миром - Статьи по MQL4: особенности автоматических торговых стратегий
 
Scriptong:

Речь идет об MFC? Если да, то можно читать дальше.

Библиотека должна быть именно 32-хбитная. Ошибка 126 свидетельствует о том, что терминал не может найти все DLL, на которые ссылается исходная библиотека. Таким образом, нужно либо включить в состав DLL все библиотеки, на которые она ссылается, либо положить в папку терминала недостающие библиотеки.

Решение для каждого из способов:

1. Включить в состав DLL. Компилировать проект в статической DLL. Свойства проекта - Свойства конфигурации - Использование MFC - Использовать MFC в статической библиотеке. 

2. Положить в папку недостающие библиотеки. Открыть DLL при помощи Dependency Walker и просмотреть, на какие DLL (из MFC) она ссылается. У меня, чаще всего, это: mfc100ud.dll, msvcp100d.dll и msvcr100d.dll. 

Получилось, установил туда Visual Studio 2010 redistributional, там было все чего не хватало..

Спасибо, что указал направление...