Конференция "WinAPI" » 0xc0000008 при подключении процедуры из DLL [D5, WinXP]
 
  • Petrovich (15.04.08 10:30) [0]
    Здравствуйте, мастера.
    Подскажите, что я делаю не так:
    Есть некая DLL с именем mqic32.dll, лежит в 'd:\IBM\WebSphere MQ\bin\' (путь этот в системной PATH присутствует)
    обявляю
    procedure MQDISC(......);cdecl;external 'mqic32.dll';

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

    При запуске скомпиленного EXE-шника ошибок не выдает.
    Если же пытаюсь из-под среды запустить, то получаю ошибку 0xc0000008.
    А мне надо проект подебажить.
    Кто-нить знает, как это вылечить?
  • tesseract © (15.04.08 11:53) [1]

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


    cdecl точно ? А с указателями  которые в DLL нормально всё  ?
  • Petrovich (15.04.08 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, но ошибки остаются!
  • Сергей М. © (15.04.08 12:49) [3]

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


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


    > Handle равен 0


    Вызови GetLastError и узнай почему.
  • Petrovich (15.04.08 13:02) [4]

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

    Нет.
    Уточняю: IBM офицально не декларирует в MQ работу с Delphi. На их родном сайте был найдет модуль-обертка для вызова MQ API (автора не помню, но это не сами АйБиЭмеры). Строка
    procedure MQDISC(......);cdecl;external 'mqic32.dll';
    из этого модуля.
    Где-то полгода назад был писан софт - тогда все нормально дебажилось.
    Недавно встал вопрос о "докрутить" - получаю вышеописанные грабли.
    Или у меня MQ/Дельфи/Систему за это время переклинило или я че-то не понимаю.
  • tesseract © (15.04.08 14:19) [5]
    Не факт, что тут ошибка. Перезаписать память можно где угодно, а AV схватить тут.
  • palva © (15.04.08 22:51) [6]
    Может быть в новой версии dll добавился параметр?
    8 - это случайно не значение какой-нибудь локальной переменной? Зайдите внутрь функции в окне CPU и выясните, как обрабатываются параметры и правильно ли. Надо надеяться, это происходит в начале работы функции.
  • Petrovich (16.04.08 10:17) [7]
    Может я че-то не догоняю...
    Ошибка валиться в среде ДО ПЕРВОГО ШАГА, т.е. нажимаю Ф8, получаю ошибку (!) и только потом попадаю на самый первый begin. Непосредственный вызов функции происходит шагов через 10.
    При чем тут параметры?
  • han_malign © (16.04.08 10:19) [8]

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

    0xc0000008 - OS Exceptions - Invalid handle

    телепатирую - смотрите инициализацию локальных переменных...
  • han_malign © (16.04.08 10:28) [9]

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

    - угу, а путь указать не судьба? Или для начала убедиться что он пристуствует в переменной PATH среды окружения?
    Оттуда и Invalid handle.
  • Petrovich (16.04.08 13:23) [10]
    2han_malign:

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


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

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

    зы. Вопрос снимается - я не знал, что добрый админ накатил апдейт на MQ, а мне ничего не сказал про это. Снес все нах и переставил без апдейта - все встало на свои места.
    Всем спасибо.
 
Конференция "WinAPI" » 0xc0000008 при подключении процедуры из DLL [D5, WinXP]
Есть новые Нет новых   [134433   +22][b:0][p:0]