Ошибка 0xC000007B и смешение кода

Сравнительно недавно я работал над одной небольшой программой. Она была предельно простой (проверяла работу функции в подгружаемой библиотеке). Программа нормально компилировалась (даже без предупреждений), но при ее запуске выдавалось сообщение об ошибке 0xC000007B.

Точнее выводилось окно.

Причем данная ошибка выводилась до того, как моя программа начинала работать. В чем дело? Я полез в Интернет. Оказалось, что это весьма распространенная проблема при запуске некоторых компьютерных игр. Везде предлагались одни и те же советы: переустановить игру, проверить компьютер на вирусы, обновить драйвера на видеокарту, запустить проблемную программу с правами администратора и некоторые другие. Ни один из этих способов мне не подходил.

Выдаваемый код ошибки 0xC000007B соответствует константе ERROR_INVALID_NAME. Функция FormatMessage на него формирует сообщение: «Синтаксическая ошибка в имени файла, имени папки или метке тома». Не густо. О каком файле речь, если моя программа даже не может запуститься?

Немного подумав, я все-таки нашел решение, и оно никак не связано с именем файла, папки или тома. Решение оказалось очень простым.

Дело в том, что разрабатываемая мной программа была 32-битной, а тестируемая в ней библиотека – 64-битной. Загрузчик не мог загрузить 64-битную библиотеку в адресное пространство 32-битного процесса и отказывался запускать мою программу. Стоило мне только перекомпилировать программу под 64-битную архитектуру, как все прекрасно заработало. А почему Windows выдает ERROR_INVALID_NAME, а не что-нибудь более информативное, для меня загадка.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *