Форум: "WinAPI";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
Вниз0xc0000008 при подключении процедуры из DLL Найти похожие ветки
← →
Petrovich (2008-04-15 10:30) [0]Здравствуйте, мастера.
Подскажите, что я делаю не так:
Есть некая DLL с именем mqic32.dll, лежит в "d:\IBM\WebSphere MQ\bin\" (путь этот в системной PATH присутствует)
обявляю
procedure MQDISC(......);cdecl;external "mqic32.dll";
потом использую
MQDISC(......);
При запуске скомпиленного EXE-шника ошибок не выдает.
Если же пытаюсь из-под среды запустить, то получаю ошибку 0xc0000008.
А мне надо проект подебажить.
Кто-нить знает, как это вылечить?
← →
tesseract © (2008-04-15 11:53) [1]
> procedure MQDISC(......);cdecl;external "mqic32.dll";
cdecl точно ? А с указателями которые в DLL нормально всё ?
← →
Petrovich (2008-04-15 12:30) [2]
> cdecl точно ? А с указателями которые в DLL нормально всё ?
Без cdecl то же самое (ошибки остаются), но при вызове MQDISC ловим еще и "акцес_виалейшн".
Это попытка "дернуть" API от IBM WebSphere MQ - там с указатели нормальные, ибо поставляемые с пакетом приблуды работают без ошибок.
Интересно вот что - если делать так:
// procedure MQDISC(......);cdecl;external "mqic32.dll";
...
Handle := LoadLibrary("mqic32.DLL");
...
// MQDISC(......);
то Handle равен 0!
Если объявление и вызов MQDISC раскомментить, то Handle <> 0, но ошибки остаются!
← →
Сергей М. © (2008-04-15 12:49) [3]
> Без cdecl то же самое
Ты что же, соглашение о вызове от балды указал ?)
> Handle равен 0
Вызови GetLastError и узнай почему.
← →
Petrovich (2008-04-15 13:02) [4]
> Ты что же, соглашение о вызове от балды указал ?)
Нет.
Уточняю: IBM офицально не декларирует в MQ работу с Delphi. На их родном сайте был найдет модуль-обертка для вызова MQ API (автора не помню, но это не сами АйБиЭмеры). Строка
procedure MQDISC(......);cdecl;external "mqic32.dll";
из этого модуля.
Где-то полгода назад был писан софт - тогда все нормально дебажилось.
Недавно встал вопрос о "докрутить" - получаю вышеописанные грабли.
Или у меня MQ/Дельфи/Систему за это время переклинило или я че-то не понимаю.
← →
tesseract © (2008-04-15 14:19) [5]Не факт, что тут ошибка. Перезаписать память можно где угодно, а AV схватить тут.
← →
palva © (2008-04-15 22:51) [6]Может быть в новой версии dll добавился параметр?
8 - это случайно не значение какой-нибудь локальной переменной? Зайдите внутрь функции в окне CPU и выясните, как обрабатываются параметры и правильно ли. Надо надеяться, это происходит в начале работы функции.
← →
Petrovich (2008-04-16 10:17) [7]Может я че-то не догоняю...
Ошибка валиться в среде ДО ПЕРВОГО ШАГА, т.е. нажимаю Ф8, получаю ошибку (!) и только потом попадаю на самый первый begin. Непосредственный вызов функции происходит шагов через 10.
При чем тут параметры?
← →
han_malign © (2008-04-16 10:19) [8]
> 8 - это случайно не значение какой-нибудь локальной переменной?
0xc0000008 - OS Exceptions - Invalid handle
телепатирую - смотрите инициализацию локальных переменных...
← →
han_malign © (2008-04-16 10:28) [9]
> Handle := LoadLibrary("mqic32.DLL");
> Handle равен 0
>
> Ошибка валиться в среде ДО ПЕРВОГО ШАГА
- угу, а путь указать не судьба? Или для начала убедиться что он пристуствует в переменной PATH среды окружения?
Оттуда и Invalid handle.
← →
Petrovich (2008-04-16 13:23) [10]2han_malign:
> - угу, а путь указать не судьба? Или для начала убедиться
> что он пристуствует в переменной PATH среды окружения?Оттуда
> и Invalid handle.
> Есть некая DLL с именем mqic32.dll, лежит в "d:\IBM\WebSphere
> MQ\bin\" (путь этот в системной PATH присутствует)
Вниметельнее читайте, сударь, а уж потом под****те!
зы. Вопрос снимается - я не знал, что добрый админ накатил апдейт на MQ, а мне ничего не сказал про это. Снес все нах и переставил без апдейта - все встало на свои места.
Всем спасибо.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c