0xc0000008 при подключении процедуры из DLL
От: _petrovich_  
Дата: 15.04.08 06:58
Оценка:
Здравствуйте.
Подскажите, что я делаю не так:
Есть некая DLL с именем mqic32.dll, лежит в 'd:\IBM\WebSphere MQ\bin\' (путь этот в системной PATH присутствует)
объявляю
...
procedure MQDISC(......);cdecl;external 'mqic32.dll';
...
потом использую
...
MQDISC(......);
...
При запуске скомпиленного EXE-шника ошибок не выдает.
Если же пытаюсь из-под среды (Delphi 5) запустить, то получаю ошибку 0xc0000008 (2 раза мессага появляется).
А мне надо проект подебажить.
Кто-нить знает, как это вылечить?

зы. Если объявить, но не вызывать — проект дебажиться!
Re: 0xc0000008 при подключении процедуры из DLL
От: sof.bix Россия http://byterix.net
Дата: 15.04.08 07:27
Оценка:
Здравствуйте, _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
От: _petrovich_  
Дата: 15.04.08 08:35
Оценка:
Здравствуйте, 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
От: DarkMaster Украина http://www.bdslib.at.ua
Дата: 15.04.08 08:56
Оценка: +1
Здравствуйте, _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
От: _petrovich_  
Дата: 16.04.08 09:35
Оценка:
Здравствуйте, sof.bix, Вы писали:

SB>А что с версионностью? Может существует некая mqic32.dll, которая имеет отличный набор функций? И вы случайно ее используете?


Спасибо за эту подсказку.
Поиск показал только одну ДЛЛ-ку на компе, но паяльник, прикрученный к Админу, дал знание того, что он, добряк, накатил очередной патч на MQ, а мне ничего не сказал. Вылечилось сносом нах MQ и переустановкой без патча.
Всем спасибо.

зы. Модуль маппинга типов и функций "заточен" под не патченную версию. Теперь надо читать изменения в патче и докручивать модуль.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.