Вызовите LoadSetupAPI
перед использованием любых методов в SetupAPI.pas
Редактировать , чтобы представить некоторую предысторию: как написано Дэвидом в его ответе и мной в моем комментарии, ошибка, вероятно, вызвана вызовом неинициализированного указателя метода. Для меня первым tip было сообщение об ошибке «Нарушение доступа»: если эквивалент нарушения прав доступа поступил из самой Windows, его назвали бы Runtime Error 216
. Код очень прост, использует только константы и вызов метода. Константы не могут генерировать AV, поэтому ошибка должна исходить от самого метода или от вызова метода.
Поскольку предоставленное объявление Delphi показывало «тип функции», я подозревал, что SetupOpenInfFile
на самом деле является указателем метода, а не import
методом. Эти указатели должны быть как-то инициализированы. Выполняя поиск SetupAPI.pas
(спасибо Google за предоставленную ссылку, потому что я не использую библиотеки JEDI), я быстро обнаружил, что она назначается с LoadSetupAPI
. Моя первая мысль: не вызывается ли LoadSetupAPI
из секции initialization
? Это не так, поэтому его нужно вызывать из кода. Проблема решена.