Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка вызова Dll в которой есть EhLib56 на WinXP 
:(
    Опции темы
KAS77
Дата 8.1.2013, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 8.1.2013

Репутация: нет
Всего: нет



Доброго времени суток!
ОС - 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 - Недостаточно памяти для обработки команды.
до параметров внешней ф-ии даже не доходит.

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


Это сообщение отредактировал(а) feodorv - 8.1.2013, 14:54
PM MAIL   Вверх
Dem_max
Дата 8.1.2013, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



а точно "Dll_AAA" существует ???


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
artsb
Дата 8.1.2013, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 5
Всего: 64



Давно я читал про это дело, но возможно...
При загрузке библиотеки, система подгружает все библиотеки, которые требуются для загружаемой. Возможно, у вас имеет место вложенная зависимость, когда вашей библиотеке требуется другая, которой требуется ваша. Происходит зацикливание и переполнение памяти. Посмотрите в Диспетчере задач, что происходит с вашей программой при загрузке этой библиотеки. Так же, попробуйте открыть вашу библиотеку с помощью программки Dependency Walker. Возможно, она что-то подскажет.
Так же, посмотрите тут.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
KAS77
Дата 9.1.2013, 06:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 8.1.2013

Репутация: нет
Всего: нет



Цитата(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)
Давно я читал про это дело, но возможно...
При загрузке библиотеки, система подгружает все библиотеки, которые требуются для загружаемой. Возможно, у вас имеет место вложенная зависимость, когда вашей библиотеке требуется другая, которой требуется ваша. Происходит зацикливание и переполнение памяти. Посмотрите в Диспетчере задач, что происходит с вашей программой при загрузке этой библиотеки. Так же, попробуйте открыть вашу библиотеку с помощью программки Dependency Walker. Возможно, она что-то подскажет.
Так же, посмотрите тут.

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

Это сообщение отредактировал(а) feodorv - 9.1.2013, 18:45
PM MAIL   Вверх
xvr
Дата 12.1.2013, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



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

PM MAIL   Вверх
KAS77
Дата 12.1.2013, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 8.1.2013

Репутация: нет
Всего: нет



Цитата(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 пока проблемка не решиться.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0944 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.