Вызов LoadLibrary(), а в ответ тишина...

Tolja
Дата: 17.10.2006 11:52:12
Привет!

Код выполняется перед тем как "dll" содержащая несколько COM объектов будет зарегистрирована:

procedure blabla(dll: String);
var
handle: THandle;
begin

handle := LoadLibrary(PChar(dll));
...
...
end;

Всю жизнь работало нормально. Сейчас на машинах клиента на которых данная библиотека еще ни разу не была зарегистрирована программа виснет на вызове LoadLibrary. Имя библиотеки верное ('.\mylib.dll') и она присутствует в том же каталоге что и программа.

Если библиотеку предварительно зарегистрировать, то проблема исчезает. Однако для LoadLibrary не должно иметь значения зарегистрирована библиотека или нет, так?

Кто-нибудь знает в чем тут дело? Мне необходимо выполнять вышеуказанный код перед регистрацией, а он зачем-то зависает..
Tolja
Дата: 17.10.2006 12:07:55
Хочу дополнить. Если я выполняю regsvr32 /u .\mydll.dll или regsvr32 .\mydll.dll, то не выскакивает никаких сообщений. Если же я это делаю с другими моими библиотеками, то выскакивает окошко с подтверждением того, что регистрация прошла удачно.
Кроик Семён
Дата: 17.10.2006 12:33:56
А может в dll-ке при загрузке какие-нибудь обращения к еще незарегистрированным классам происходят?
Кроик Семён
Дата: 17.10.2006 12:34:28
P.S.
или при выгрузке?
Tolja
Дата: 19.10.2006 14:49:07
Кроик Семён
А может в dll-ке при загрузке какие-нибудь обращения к еще незарегистрированным классам происходят?


Привет!

Все точно, если регистрирую другую библиотеку в которой находятся КОМ-объекты, используемые в библиотеке с которой у меня проблемы, то все вдруг решается наилучшим образом. Ничего не вистнет.

1. Кто-нибудь может объяснить почему?
2. И кто-нибудь может рассказать, что происходит с ДЛЛ когда я ее загружаю функцией LoadLibrary? Я не вижу какой код выполняется в ДЛЛ или вызывается (callback?) из LoadLibrary.
3. Какой код имеется ввиду когда Семен пишет: "А может в dll-ке при загрузке какие-нибудь обращения к еще незарегистрированным классам происходят?" Что это за код выполняемый при загрузке? Я его не вижу. Это какой-то код, который Дельфи генерирует но не показывает в редакторе?
Кроик Семён
Дата: 19.10.2006 18:48:49
Привет!
я вообще в данной теме не особенно силен. :)

Но вот мои предположения:
1) у меня есть чувство, что в загружаемой библиотеке ты пытаешься в LoadLibrary что-нибудь сделать с еще незарегистрированным классом. Ну и вылетает exception, который ты не перехватываешь и библиотека аварийно вываливается.
2) Или в каком-нибудь unit'е в секции INITIALIZATION или BEGIN (не знаю, выполняется ли код этих секций в dll-ке)
3) или какая-нибудь другая dll-ка, которая не в System32, пытается статически подгрузиться. А так-как твоя dll ее не находит, то тоже аварийно вываливается.
Кроик Семён
Дата: 19.10.2006 18:52:25
P.S.
имел ввиду не "пытаешься в LoadLibrary что-нибудь сделать", а "пытаешься в BEGIN-секции файла проекта библиотеки что-нибудь сделать"