Как диагностировать ошибку «Не удается получить доступ к информации о пакете» в Delphi IDE - PullRequest
0 голосов
/ 11 июля 2009

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

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

TFrame
  TBaseFRame
TBaseSizeableFrame
  TViewerType1
  TViewerType2

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

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

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

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

Не удается получить доступ к информации о пакете для пакета 'MyPanels.bpl'

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

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

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

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


Обновление позже:

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

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

1 Ответ

0 голосов
/ 11 июля 2009

ОК, я определенно что-то упускаю. Из 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...