Технический вопрос...
Теоретически, МТ4 всегда х86, значит и DLL тоже должна быть х86.
|
/Libraries |
Папка для хранения библиотек MQL5/MQL4. |
DLL это не библиотека MQL5/MQL4.
Такое вот дело, друзья, имею 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.
- www.dependencywalker.com
Речь идет об 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 ?
- www.mql5.com
Речь идет об 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, там было все чего не хватало..
Спасибо, что указал направление...
Такое вот дело, друзья, имею Window Server 2008, там конфигурация 64 бита.
устанавливаю ка положено для МТ4 свою Dll, сконфигурированную в Visual Studio 2010 как win32, в MQL4\Library\
получаю - код 126 - система не может найти мою DLL.
ладно, конфигурирую эту DLL в Visual Studio 2010 как x64,
теперь получаю код 193 - DLL не является программой win32,
т.е. делаю вывод, что модуль собственно находится, но грузиться не хочет...
Есть у кого-то какие-то намеки на решение этой незадачи ?