Здравствуйте.
Подскажите, что я делаю не так:
Есть некая DLL с именем mqic32.dll, лежит в 'd:\IBM\WebSphere MQ\bin\' (путь этот в системной PATH присутствует)
объявляю
...
procedure MQDISC(......);cdecl;external 'mqic32.dll';
...
потом использую
...
MQDISC(......);
...
При запуске скомпиленного EXE-шника ошибок не выдает.
Если же пытаюсь из-под среды (Delphi 5) запустить, то получаю ошибку 0xc0000008 (2 раза мессага появляется).
А мне надо проект подебажить.
Кто-нить знает, как это вылечить?
зы. Если объявить, но не вызывать — проект дебажиться!
Здравствуйте, _petrovich_, Вы писали:
__>Здравствуйте. __>Подскажите, что я делаю не так: __>Есть некая DLL с именем mqic32.dll, лежит в 'd:\IBM\WebSphere MQ\bin\' (путь этот в системной PATH присутствует) __>объявляю __>... __>procedure MQDISC(......);cdecl;external 'mqic32.dll'; __>... __>потом использую __>... __>MQDISC(......); __>... __>При запуске скомпиленного EXE-шника ошибок не выдает. __>Если же пытаюсь из-под среды (Delphi 5) запустить, то получаю ошибку 0xc0000008 (2 раза мессага появляется). __>А мне надо проект подебажить. __>Кто-нить знает, как это вылечить?
__>зы. Если объявить, но не вызывать — проект дебажиться!
А что с версионностью? Может существует некая mqic32.dll, которая имеет отличный набор функций? И вы случайно ее используете?
Я бы линковал библиотеки динамически, так можно многих проблем избежать и проконтролировать свои шаги получив внятные исключения
Re[2]: 0xc0000008 при подключении процедуры из DLL
Здравствуйте, sof.bix, Вы писали:
SB>А что с версионностью? Может существует некая mqic32.dll, которая имеет отличный набор функций? И вы случайно ее используете? SB>Я бы линковал библиотеки динамически, так можно многих проблем избежать и проконтролировать свои шаги получив внятные исключения
mqic32.dll на компе в единственном экземпляре.
Интересно вот что — если делать так:
// procedure MQDISC(......);cdecl;external 'mqic32.dll';
...
Handle := LoadLibrary('mqic32.DLL');
...
// MQDISC(......);
то Handle равен 0!
Если объявление и вызов MQDISC раскомментить, то Handle <> 0, но ошибки остаются!
Re[3]: 0xc0000008 при подключении процедуры из DLL
Здравствуйте, _petrovich_, Вы писали:
__>mqic32.dll на компе в единственном экземпляре. __>Интересно вот что — если делать так: __>// procedure MQDISC(......);cdecl;external 'mqic32.dll'; __> Handle := LoadLibrary('mqic32.DLL');
1) Лучше грузить по абсолютному пути. Затем проверять Handle...
DLLHanle:=LoadLibrary('D:\.....\mqic32.dll');
if DLLHandle<>0 then ......
2) Инициализировать и вызывать вот как (соответственно каждый шаг котролируем)...
type
TMQDISK=procedure (....); cdecl;
var FMQDISK:TMQDISK;
// ....
FMQDISK:=nil;
@FMQDISK:=GetProcAddress(DLLHandle,'MQDISK'); // внимательно! можем точку входа не найти из-за несовпадения имени ф-ции.
// ....
if @FMQDISK<>nil then FMQDISK(....);
2) MQDISK () точно cdecl а не stdcall? Возможная причина вашего AV — несовпадения модели вызова в ДЛЛ и приложении.
WBR, Dmitry Beloshistov AKA [-=BDS=-]
Re[2]: 0xc0000008 при подключении процедуры из DLL
Здравствуйте, sof.bix, Вы писали:
SB>А что с версионностью? Может существует некая mqic32.dll, которая имеет отличный набор функций? И вы случайно ее используете?
Спасибо за эту подсказку.
Поиск показал только одну ДЛЛ-ку на компе, но паяльник, прикрученный к Админу, дал знание того, что он, добряк, накатил очередной патч на MQ, а мне ничего не сказал. Вылечилось сносом нах MQ и переустановкой без патча.
Всем спасибо.
зы. Модуль маппинга типов и функций "заточен" под не патченную версию. Теперь надо читать изменения в патче и докручивать модуль.