Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

0xc0000008 при подключении процедуры из DLL [D5, WinXP]


Petrovich ©   (2008-04-15 10:30:00) 

Здравствуйте, мастера.
Подскажите, что я делаю не так:
Есть некая DLL с именем mqic32.dll, лежит в 'd:\IBM\WebSphere MQ\bin\' (путь этот в системной PATH присутствует)
обявляю
procedure MQDISC(......);cdecl;external 'mqic32.dll';

потом использую
MQDISC(......);

При запуске скомпиленного EXE-шника ошибок не выдает.
Если же пытаюсь из-под среды запустить, то получаю ошибку 0xc0000008.
А мне надо проект подебажить.
Кто-нить знает, как это вылечить?


Petrovich   (2008-04-16 13:23:00) [1]

2han_malign:

> - угу, а путь указать не судьба? Или для начала убедиться
> что он пристуствует в переменной PATH среды окружения?Оттуда
> и Invalid handle.


> Есть некая DLL с именем mqic32.dll, лежит в 'd:\IBM\WebSphere
> MQ\bin\' (путь этот в системной PATH присутствует)

Вниметельнее читайте, сударь, а уж потом под****те!

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


han_malign   (2008-04-16 10:28:00) [2]


> Handle := LoadLibrary('mqic32.DLL');
> Handle равен 0
>
> Ошибка валиться в среде ДО ПЕРВОГО ШАГА

- угу, а путь указать не судьба? Или для начала убедиться что он пристуствует в переменной PATH среды окружения?
Оттуда и Invalid handle.


han_malign   (2008-04-16 10:19:00) [3]


> 8 - это случайно не значение какой-нибудь локальной переменной?

0xc0000008 - OS Exceptions - Invalid handle

телепатирую - смотрите инициализацию локальных переменных...


Petrovich   (2008-04-16 10:17:00) [4]

Может я че-то не догоняю...
Ошибка валиться в среде ДО ПЕРВОГО ШАГА, т.е. нажимаю Ф8, получаю ошибку (!) и только потом попадаю на самый первый begin. Непосредственный вызов функции происходит шагов через 10.
При чем тут параметры?


palva   (2008-04-15 22:51:00) [5]

Может быть в новой версии dll добавился параметр?
8 - это случайно не значение какой-нибудь локальной переменной? Зайдите внутрь функции в окне CPU и выясните, как обрабатываются параметры и правильно ли. Надо надеяться, это происходит в начале работы функции.


tesseract   (2008-04-15 14:19:00) [6]

Не факт, что тут ошибка. Перезаписать память можно где угодно, а AV схватить тут.


Petrovich   (2008-04-15 13:02:00) [7]


> Ты что же, соглашение о вызове от балды указал ?)

Нет.
Уточняю: IBM офицально не декларирует в MQ работу с Delphi. На их родном сайте был найдет модуль-обертка для вызова MQ API (автора не помню, но это не сами АйБиЭмеры). Строка
procedure MQDISC(......);cdecl;external 'mqic32.dll';
из этого модуля.
Где-то полгода назад был писан софт - тогда все нормально дебажилось.
Недавно встал вопрос о "докрутить" - получаю вышеописанные грабли.
Или у меня MQ/Дельфи/Систему за это время переклинило или я че-то не понимаю.


Сергей М.   (2008-04-15 12:49:00) [8]


> Без cdecl то же самое


Ты что же, соглашение о вызове от балды указал ?)


> Handle равен 0


Вызови GetLastError и узнай почему.


Petrovich   (2008-04-15 12:30:00) [9]


> cdecl точно ? А с указателями  которые в DLL нормально всё ?

Без cdecl то же самое (ошибки остаются), но при вызове MQDISC ловим еще и "акцес_виалейшн".
Это попытка "дернуть" API от IBM WebSphere MQ - там с указатели нормальные, ибо поставляемые с пакетом приблуды работают без ошибок.

Интересно вот что - если делать так:
//  procedure MQDISC(......);cdecl;external 'mqic32.dll';
...
 Handle := LoadLibrary('mqic32.DLL');
...
//  MQDISC(......);
то Handle равен 0!
Если объявление и вызов MQDISC раскомментить, то Handle <> 0, но ошибки остаются!


tesseract   (2008-04-15 11:53:00) [10]


> procedure MQDISC(......);cdecl;external 'mqic32.dll';


cdecl точно ? А с указателями  которые в DLL нормально всё  ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо