Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Ошибка вызова Dll в которой есть EhLib56 на WinXP


Автор: KAS77 8.1.2013, 13:55
Доброго времени суток!
ОС - XP sp3
Появилась проблема вызова Dll в которой есть DBGridEh (версия 5.6 для Builder 5.0) из другой Dll в которой так же есть DBGridEh (версия 5.6 для Builder 5.0)
в обоих Dll добавлены msimg32.lib потому как по другому не линкуются - ругается на AlphaBlend.
Если вызывать из приложения где нет  DBGridEh (версия 5.6 для Builder 5.0) и соответственно msimg32.lib - то DLL находится и вызывается ф-я
Пробовал запускать на Windows7 - работает. На XP - нет.

код:

Код
HINSTANCE TekH = LoadLibrary("Dll_AAA");
   if (TekH == NULL)
   {  int e = GetLastError();
       MessageBox( NULL, (IntToStr(e) + " - "+ SysErrStr(e)).c_str(), "Ошибка при загрузке Dll!", MB_OK );
      return;
   }


выходит ошибка: 8 - Недостаточно памяти для обработки команды.
до параметров внешней ф-ии даже не доходит.

Может кто сталкивался? 
Подскажите чего делать.

Автор: Dem_max 8.1.2013, 16:18
а точно "Dll_AAA" существует ???

Автор: artsb 8.1.2013, 21:03
Давно я читал про это дело, но возможно...
При загрузке библиотеки, система подгружает все библиотеки, которые требуются для загружаемой. Возможно, у вас имеет место вложенная зависимость, когда вашей библиотеке требуется другая, которой требуется ваша. Происходит зацикливание и переполнение памяти. Посмотрите в Диспетчере задач, что происходит с вашей программой при загрузке этой библиотеки. Так же, попробуйте открыть вашу библиотеку с помощью программки http://www.dependencywalker.com/. Возможно, она что-то подскажет.
Так же, посмотрите http://www.codeproject.com/Questions/195706/LoadLibrary-error-code-0x00000008.

Автор: KAS77 9.1.2013, 06:48
Цитата(Dem_max @ 8.1.2013,  16:18)
а точно "Dll_AAA" существует ???

Да в этом коде ошибка была. (много раз пробовал по всякому вызывать)  smile 
Все Dll лежат в одной папке, запускаются из других приложений. А одна из другой не хочет.
Что то с памятью происходит. 
Скорей всего в EHLib56 есть что то работающее на Win7, а на XP проблемы с памятью, 
или EHLib56 нужны Dll какие то (повидимому связанные с графикой). 
Еще раз попробывал - на Win7 - работает.
надо так:
 
Код

HINSTANCE TekH = LoadLibrary("Dll_AAA.dll");
   if (TekH == NULL)
   {  int e = GetLastError();
       MessageBox( NULL, (IntToStr(e) + " - "+ SysErrStr(e)).c_str(), "Ошибка при загрузке Dll!", MB_OK );
      return;
   }


сообшение выходит: 8 - Недостаточно памяти для обработки команды.
и после этого все приложение выгружается.
В диспетчере ни чего не видно.

Добавлено @ 06:50
Цитата(artsb @ 8.1.2013,  21:03)
Давно я читал про это дело, но возможно...
При загрузке библиотеки, система подгружает все библиотеки, которые требуются для загружаемой. Возможно, у вас имеет место вложенная зависимость, когда вашей библиотеке требуется другая, которой требуется ваша. Происходит зацикливание и переполнение памяти. Посмотрите в Диспетчере задач, что происходит с вашей программой при загрузке этой библиотеки. Так же, попробуйте открыть вашу библиотеку с помощью программки http://www.dependencywalker.com/. Возможно, она что-то подскажет.
Так же, посмотрите http://www.codeproject.com/Questions/195706/LoadLibrary-error-code-0x00000008.

Спасибо за ссылочки. Буду пробовать.

Автор: xvr 12.1.2013, 10:49
У Windows весьма специфичные взгляды на то, где искать DLL'и. Не зря раньше программы пытались все свои dll в System32 записать  smile Проверьте, все ли dll доступны по дефолтным путям (включая и те, на которые ссылается ваша dll)  Dependency Walker это все покажет

Автор: KAS77 12.1.2013, 12:49
Цитата(xvr @ 12.1.2013,  10:49)
У Windows весьма специфичные взгляды на то, где искать DLL'и. Не зря раньше программы пытались все свои dll в System32 записать  smile Проверьте, все ли dll доступны по дефолтным путям (включая и те, на которые ссылается ваша dll)  Dependency Walker это все покажет

Пробовали смотреть программой Dependency Walker - ругалась на нехватку 4-х Dll, скачали, засунули в system32, Dependency Walker - все Ок!
А вызов одной Dll из другой - ошибку дает. Причем если в обоих Dll есть GridEh 5.6 . 
Сделал вторую Dll с GridEh 2 или 3 линейки - она вызывается из первой.
Ошибка гдето в GridEh 5.6 в смеси с XP.
Приходится теперь на 2-х компах сидеть. smile пока проблемка не решиться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)