Как диагностировать ошибку "Невозможно получить доступ к информации о пакете" в Delphi IDE

Я разрабатываю набор компонентов на основе TFrame, которые наследуются друг от друга (как уже знают многие, кто мне чрезвычайно помогал!), И сталкиваюсь с еще одной маленькой "загвоздкой". связанные с пакетами и установкой.

По сути, у меня следующая иерархия:

TFrame
  TBaseFRame
TBaseSizeableFrame
  TViewerType1
  TViewerType2

... и панель TExtRzPanel, которая наследуется от Raize Panel и добавляет к ней некоторые функции изменения размера / перемещения, а также несколько других свойств / функций. TBaseSizeableFrame использует этот компонент и передает большую часть его функций самому фрейму, поэтому я могу визуально разрабатывать составные компоненты Viewer. В целом работает хорошо.

Потомки TFrame зарегистрированы в палитре (см. этот пост для связанный вопрос, который я задавал ранее). В настоящее время у меня есть следующие пакеты:

  • MyPanels - содержит TExtRzPanel.
  • BaseFrames - содержит TBaseFrame и TBaseSizeableFrame.
  • ViewerSet1 - содержит один компонент Viewer на основе кадра и невизуальный компонент, который вызывает это Viewer как диалоговую форму. (Я планирую, что в этом пакете будет еще несколько зрителей).

Основная ошибка, с которой начался мой нынешний хаос, заключалась в следующем:

Нет доступа к информации о пакете MyPanels.bpl

У меня достаточно головокружения от этой штуки сейчас, когда у меня проблемы с запоминанием точных последовательностей того, что я пробовал, и в каком порядке, но проблема, похоже, началась, когда я добавил диалоговую форму в ViewerSet1, который использует TViewer frame из того же проекта, и который (конечно), таким образом, использует TExtRzPanel (это пакет, на который жалуется IDE).

На основании этого я удалил Файлы DCP (и файлы DCU, я думаю, в какой-то момент), удалили пакеты, а затем перекомпилировали / переустановили их MyPanels -> BaseFrames, и все они заработали до этого момента, но после установки ViewerSet1 все снова разлетелось на части. Другие ошибки, которые я заметил в процессе попытки выяснить это, включают следующие:

  • Пакет C: \ Documents and Settings \ All Users \ Documents \ RAD Studio \ 5.0 \ Bpl \ MyPanels.bpl не может быть установлен, поскольку он был создан с помощью другой версии Delphi или CBuilder. Вы хотите попытаться загрузить этот пакет при следующей загрузке проекта? (Примечание: я создал это только с ОДНОЙ версией Delphi - Delphi 2007)
  • В какой-то момент я заметил, что описание пакета для MyPanels не «взяло» (т.е. оно появилось, поскольку имя файла просто Tools -> Compoenent -> Install Packages), что заставляет меня думать, что может быть есть две версии файла, которые IDE находит / использует, но я не вижу / не нахожу, что это так.
  • Предупреждение, которое Delphi выдает при запуске, указывая, что он не может загрузить установленный пакет, хотите ли вы загрузить его в следующий раз и т. Д.
  • Невозможно получить доступ к информации о пакете MyPanels.bpl (вспенить, промыть, повторить)

Любая помощь / указания относительно того, как диагностировать, наряду с любыми концептуальными объяснениями, которые могли бы помочь мне понять, что вообще нужно искать, были бы наиболее оценены. ЗАРАНЕЕ СПАСИБО. Вы, ребята, были ТАК полезны здесь! Спасибо. :)


Обновить позже:

Немного отложив это в сторону и вернувшись к нему, я попытался удалить все файлы DCP / DCU MyPanels, а затем шаг за шагом установить три пакета. (VMWare здесь на вес золота - снимки после каждого успеха, чтобы не приходилось начинать сначала, если / когда что-то пошло не так). Оказывается, если я удалил диалоговую форму из пакета ViewerSet1, она установится нормально. Если я затем снова добавлю форму (которая не отображается с ее DFM, как будто я столкнулся с здесь), похоже, установка прошла успешно. У меня не установлены все компоненты и, похоже, они работают нормально (и снимок всего этого на моей виртуальной машине!), Но я все еще не уверен, что пошло не так и почему. Что могло сделать добавление этой формы изначально, что могло бы вызвать такого рода ошибки? Любая идея?

Я думаю, что даже лучшее объяснение / понимание того, какие вещи могут вызывать ошибку «Невозможно получить доступ к информации о пакете», было бы полезно в долгосрочной перспективе.


person Jamo    schedule 11.07.2009    source источник


Ответы (1)


Хорошо, я определенно кое-что упустил. Из SysUtils:

function PackageInfoTable(Module: HMODULE): PPackageInfoHeader;
var
  ResInfo: HRSRC;
  Data: THandle;
begin
  Result := nil;
  ResInfo := FindResource(Module, 'PACKAGEINFO', RT_RCDATA);
  if ResInfo <> 0 then
  begin
    Data := LoadResource(Module, ResInfo);
    if Data <> 0 then
    try
      Result := LockResource(Data);
      UnlockResource(Data);
    finally
      FreeResource(Data);
    end;
  end;
end;

Итак, если вы получаете эту последнюю ошибку, к вашему пакету не прикреплен необходимый ресурс PACKAGEINFO. Вероятно, это также причина вашей первой ошибки (созданной с помощью другой версии Delphi).

Прошу прощения за этот вопрос, но вы создали пакет, выбрав File-> New-> Package-Delphi? Я спрашиваю, потому что у этого есть все признаки библиотеки, которая просто имеет расширение bpl.

Если вы уверены, что пакет был создан правильно, могу ли я предложить вам поискать на всем жестком диске файл DLL с тем же именем. И для всех найденных пакетов bpl вы должны выполнить следующее:

C:\Program Files\CodeGear\RAD Studio\5.0\bin\tdump.exe mypackage.bpl>mypackage.txt

В вашем файле mypackage.txt должен быть ресурс с именем PACKAGEINFO.

Кроме того, вы можете загрузить filemon.exe с live.sysinternals.com, установить фильтр bds и следить за тем, что на самом деле пытается загрузить IDE. Это вполне может быть другой пакет, который загружается вашим пакетом, и ко второму пакету не прикреплен PACKAGEINFO.

person Cobus Kruger    schedule 11.07.2009
comment
Не нужно извиняться за что-нибудь - я ценю ваш вклад / идеи и попробую их. - person Jamo; 11.07.2009
comment
Хотите знать, есть ли у вас все признаки библиотеки, которая просто имеет расширение bpl, может сочетаться с обновленной информацией выше re: добавление диалоговой формы ...? - person Jamo; 11.07.2009
comment
Хорошо, если удаление диалогового окна позволяет установить пакет, то очевидно, что проблема не в том, что пакет определен неправильно. Мне все еще любопытно узнать, что вам показывает TDUMP - как в сломанной версии пакета, так и в рабочей версии, которая не содержит диалогового окна. Если это какая-то проблема Delphi, то, возможно, вы можете попытаться противостоять ей, переместив диалог в отдельный отдельный пакет времени выполнения? - person Cobus Kruger; 12.07.2009
comment
TDUMP (я не использовал его раньше, кстати) выглядит практически так же, как и другие (работающие) BPL, которые я создал. Это довольно большой текстовый файл. Что конкретно мне нужно искать? - person Jamo; 28.07.2009