Здравствуйте господа разработчики ! Просьба прокомментировать ситуацию с работающей компонентой, которая после обновления ГТК перестала работать (СКАЧАТЬ ПРИМЕР):
------------- Ограничу радиус поиска.
Код
Lib := LoadLibrary('gisprint.dll');
Эта строчка хочет какую то реликвию vcl60.bpl. --- П.С пока разработчики читают и разбираются, для простого обывателя подсказываю путь временного решения проблемы. Откройте папку с ГИС Оператором 11 (ГИС Картой 2011) и скопируйте в Windows/System32 или каталог с Вашей программой 2 файла rtl60.bpl и vcl60.bpl
KFF пишет: Эта строчка хочет какую то реликвию vcl60.bpl.
Это не реликвия, а пакеты от Билдер/Дельфи версии 6 - рантайм и ядро видеокомпонентлайбрери, без которых собрана сама принт-библиотека GTK. --- ЗЫ - в эпоху терабайтовых винчестеров пропадает смысл экономии на размерах исполняемых модулей. ИМХО. Собрал модуль со всем до кучи - и голова не болит.
Скачал пример. Для надежности проверки удалил все rtl60.bpl и vcl60.bpl (так что после восстановления delphi еле запустил). Вызов диалога работает без проблем. Проверял на библиотеках от 07.10.2013 и на более ранних (сентябрьских). Может у вас библиотека gisprint цепляется не из system32?
Андрей Владиславович, я понимаю Вашу позицию как руководителя НО просьба: не защищать сборщиков библиотек, которые забыли установить галочку "включать пакеты при сборке" в Билдере перед публикацией. Что бы не быть голословным представляю чистый пример без "наворотов" (СКАЧАТЬ) В папке единственная библиотека которая загружается по полному пути см.код ниже:
Код
procedure TForm1.Button1Click(Sender: TObject);
var sFileName : string;
lib : cardinal;
begin
sFileName := ExtractFilePath(Application.Exename)+'GisPrint.dll';
lib := LoadLibrary(PChar(sFileName));
FreeLibrary(lib);
end;
В этом примере, надеюсь, не будет цеплятся "другая библиотека".
П.С. Я не в том возрасте, что-бы не уметь контролировать что и откуда у меня цепляется. К счастью, я очень хорошо научился оперировать Вашим ядром причём разными версиями одновременно на одном копьютере. И ещё одно, сборщику который собирает gis*** библиотеки , настоятельно рекомендую одно из двоих : - создать виртуальную чистую машину (без ядер и без ГТК) на которой проверять сборки И/ИЛИ - по удалять личные настройки среды с операционной системы (в частности bpl с папки Windows\System32) используя те папки к которым они (bpl-ки) принадлежат. Например Builder\Bin
Не тот глуп кто не знает, а тот, кто не знает где искать.
Защитой сборщика никто не занимается и за слова отвечаю, пробовал сам ведь. Кроме того, можно запустить Tdump на эту библиотеку и убедиться, что она не ссылается на vcl60. На всякий случай ваш пример проверил еще на двух точно нулевых компьютерах (только что собрали и установили windows). Результат - все работает. Надо искать дополнительные факторы, влияющие на такой результат. Может подскажете где.
Андрей Владиславович, я приготовил ролик и сейчас он будет тыт на форуме. Думаю что проблема в следующем. Вы пользуетесь толи Буидлером 6 то ли делфи 6 и у Вас в папке Windwos\System32 есть эти два файла В конце ролика я умышленно показал кое какое содержимое своей папки Windows/System32 Суть в том, что Делфи 7 которым я пользуюсь, не содержит в своём комплекте файлов с частью наименования "60", у него все файлы "70". Получается следующая картина. Я компилию у меня вылет из за отсутствия устаревших библиотек, а Вы компилируете у Вас всё в порядок потому что эти библиоткеи в Вашей среде базовые! Вы даже не сможете их оттуда убрать потому что Борланд не запустите без сбоя всех настроек....
Проблема заключает в то о чём писал Александр Выше. Ваши сборщики DLL (не компонентной части а именно DLL) при сборке данной билоитеки выставили параметры без включения в основной код посему, DLL -пытается цепануть bpl библиотеку
То что при сборке иногда не убираем флаг использования run time библиотек - бывало. Но сейчас проверили. Я написал каким способом. Повторюсь. Собираю на Delphi6 на одном компьютере. Несу dll Гис ядра, карту, exe на другой абсолютно новый компьютер. Работает.