Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как включить в исполняемый файл библиотеки, сделано в ХР, а используется в Win98  
:(
    Опции темы
vl1639
Дата 4.5.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



Подскажите, какую инструкцию использовать, чтоб в исполняемый файл были включены библиотеки, которые использует прога и которые есть в ХР, но может не быть в Windows 98.  Или как вообще решить эту проблему - у меня нет компа с Win98,  написал несложную прогу, использую Windows XP, а она должна работать без проблем под 98-м. Искал в Инете  - вроде какую-то инструкцию компилятору надо употребить, но не нашел какую. Или может можно вывести список используемых dll, но они могут не работать под 98-м. Как поступить?
PM MAIL   Вверх
CodeMonkey
Дата 4.5.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Единственный 100% надёжный способ - это установить Win98 и проверить.
Не обязательно ставить на реальную машину. Для таких целей обычно используется VMWare или любой другой эмулятор.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
vl1639
Дата 4.5.2009, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



Но все-таки, вроде есть способ включения в исполняемый файл внешних библиотек. Только вот как и каких. Прога несложная, использует несколько функций WinApi, а остальное совсем простое. Пусть на 98-м потом буду проверять, найду где-нибудь. Но хотел бы  для страховки ...... 
PM MAIL   Вверх
Keeper89
Дата 4.5.2009, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



vl1639, как сказал CodeMonkey лучше потестировать "вживую". Не будете же вы в екзешник пихать все библиотеки типа shell32.dll.
Если хотите в зависимости от ОС делать разные вещи, см. тут.

Это сообщение отредактировал(а) Keeper89 - 4.5.2009, 18:47


--------------------
PM MAIL WWW   Вверх
vl1639
Дата 4.5.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



Конечно, когда я писал библиотеки, я подразумевал включение только используемых функций из библиотек. Если такого механизма не существует в принципе - это одно, но лазая по Инету встречал намеки, что это можно сделать, но не нашел - как  .
PM MAIL   Вверх
vl1639
Дата 5.5.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



Можно ли в свойствах проекта или компилятору, например, указать, что требуется статическое подключение используемых библиотек??
PM MAIL   Вверх
CodeMonkey
Дата 5.5.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Ээээээ.....  а компилятор-то тут причём?

Как ВЫ укажете, так и будет.

Написали вы LoadLibrary - будет вам динамическая зависимость.
Написали вы external - будет вам статическая зависимость.

Цитата
Если такого механизма не существует в принципе

Не, ну если вы напишете ABC external 'DEF.dll', и если вы в коде не использовали ABC, то DEF в секцию импорта к вам, разумеется, не занесётся. Если речь шла об этом.

Добавлено через 2 минуты и 56 секунд
P.S. Вы случайно не о директивах условной компиляции спрашиваете?

Код
{$DEFINE UseDynamic}

...

  {$IFNDEF UseDynamic}
  procedure ABC; external 'DEF.dll';
  {$ENDIF}

...

  {$IFDEF UseDynamic}

  Lib := LoadLibrary('DEF.dll');
  if Lib = 0 then
    RaiseLastOSError;
  ABC := GetProcAddress(Lib, 'ABC');
  if not Assigned(ABC) then
    RaiseLastOSError;

  {$ENDIF}

  ABC;






--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 5.5.2009, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Цитата(vl1639 @  4.5.2009,  17:33 Найти цитируемый пост)
у меня нет компа с Win98,  

виртуальная машина тебя спасёт
PM MAIL   Вверх
kami
Дата 5.5.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Что-то меня наводит на мысль, что требуется включение в дистрибутив своих, т.е. скомпилированных у себя же на машине. Это "что-то" - 
Цитата(vl1639 @  4.5.2009,  20:29 Найти цитируемый пост)
когда я писал библиотеки.

Но в любом случае - dll в экзешник не включить.
Максимум можно сделать, как инсталляторы - т.е. "запихать" в ресурсы, а при запуске - распаковывать во временную директорию.
Только тогда нужно использовать динамическое связывание.
PM MAIL WWW   Вверх
vl1639
Дата 5.5.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



Похоже я нечетко спрашивал и всех запутал. Возникла проблема. Я написал челу прогу, писал под ХР, проверил, все работает, отдал. У него под 98 не идет, выдает ошибку, пишет список регистров, где ошибки  и т.п. В проге я не использую своих dll, только стандартные, но видимо в 98 другие стандарты или вызовы или еще что-то. Он мне говорит, сделай чтоб работало. Я поэтому и решил, что спасти ситацию может включение в текст проги всех используемых функций или стандартных библиотек. Из прошедшего здесь разбора полета я понял, что завернул не туда. Вопрос видимо некорректен  - так задача не решается. 
PM MAIL   Вверх
CodeMonkey
Дата 5.5.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Вы на какой Delphi пишете? Новые Delphi (не то с 2006, не то с 2007) не поддерживают Win9x.
Далее, какие используете компоненты? Компоненты могут использовать функции, недоступные на Win9x.

Только я боюсь, что "наугад" вы это не исправите. Поставьте Win98 на виртуалку.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Keeper89
Дата 5.5.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Думаю, как сказал CodeMonkey, помогут директивы условной компиляции. Определяйте версию Windows и подключайте соответствующие библиотеки.
Плюс, протестируйте наконец на виртуальной машине (например VirtualBox), определите ошибки и недостающие библиотеки.

Это сообщение отредактировал(а) Keeper89 - 5.5.2009, 20:05


--------------------
PM MAIL WWW   Вверх
vl1639
Дата 6.5.2009, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



Я использую Дельфи 6. Задачка частная и использоваться будет исключительно на 98, поэтому, похоже, решать ее в общем ключе, с определением версии системы и т.п. - это как стрелять из пушки по воробьям. Кроме того, я то хотел бы все решить без использования 98 в любом виде - живом или виртуальном. Вот я использую, к примеру, функции CompareMem(), CreateFileMapping() - далее определяю или знаю, что первая из модуля SysUtils, а вторая из модуля Windows.  А какие конкретно dll используются - как определить, этого не знаю? Помнится, что когда по диагонали читал Архангельского, то где-то попалось место о том, что что можно статически подключить используемые dll и проге не нужны будут системные средства. Поэтому и вылез с вопросом. Хотя это может было не у Архангельского и вообще не про Дельфи, сорри. Пожалуй закончим, а то стали уже повторяться.
PM MAIL   Вверх
dumb
Дата 6.5.2009, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 3
Всего: 158



Цитата(vl1639 @  6.5.2009,  07:21 Найти цитируемый пост)
Вот я использую, к примеру, функции CompareMem(), CreateFileMapping() - далее определяю или знаю, что первая из модуля SysUtils, а вторая из модуля Windows.
на те, что из модуля Windows читай ремарки и смотри минимальную версию винды в msdn'е.

Цитата(vl1639 @  6.5.2009,  07:21 Найти цитируемый пост)
А какие конкретно dll используются - как определить, этого не знаю?

http://forum.vingrad.ru/forum/topic-244652.html

а теперь главный вопрос: с чего ты решил, что падение программы по необработанному исключению вызвано какими-то там dll'лями?

Цитата(vl1639 @  5.5.2009,  19:42 Найти цитируемый пост)
Вопрос видимо некорректен  - так задача не решается.
вот тут ты прав. у тебя два варианта:
  •  выкладываешь код здесь - народ скорее всего глазами ошибку найдет.
  •  отлаживаешься под 98ой самостоятельно.

PM MAIL   Вверх
CodeMonkey
Дата 6.5.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата
с чего ты решил, что падение программы по необработанному исключению вызвано какими-то там dll'лями?

А точно там необработанное исключение? Я тоже сперва так подумал, а потом...  вдруг там сообщение о ненайденном импорте тоже так же показывается? Я уж не помню, как там, в 9x.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
dumb
Дата 6.5.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 3
Всего: 158



Цитата(CodeMonkey @  6.5.2009,  11:11 Найти цитируемый пост)
вдруг там сообщение о ненайденном импорте тоже так же показывается?

Цитата(vl1639 @  5.5.2009,  19:42 Найти цитируемый пост)
У него под 98 не идет, выдает ошибку, пишет список регистров, где ошибки  и т.п.


PM MAIL   Вверх
bems
Дата 6.5.2009, 22:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



кстати точный текст сообщения об ошибке (вместе с адресом исключения) тоже был бы кстати


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Akella
Дата 7.5.2009, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Цитата(CodeMonkey @  5.5.2009,  19:59 Найти цитируемый пост)
овые Delphi (не то с 2006, не то с 2007) не поддерживают Win9x.

поддерживают

Добавлено через 3 минуты и 22 секунды
vl1639, какие компоненты ты используешь?
1. Устанавливаешь ли ты на чужой комп борландовский менеджер памяти? borlndmm.dll?
2. Устанавливаешь ли ты на чужой комп библионтеку gdiplus.dll?
3. Если ты используешь MIDAS, то также таскать с собой нужно и midas.dll.

Видишь ли, проблема может быть не в версии винды, а в том, что при установке дельфи у тебя на ком копируются некоторые специфичные файлы, которых нет у заказчика.

Добавлено через 4 минуты и 46 секунд
Цитата(dumb @  6.5.2009,  08:10 Найти цитируемый пост)
 отлаживаешься под 98ой самостоятельно.

причём под девственно чистой 98ой виндой
PM MAIL   Вверх
CodeMonkey
Дата 7.5.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата
поддерживают

Delphi 2007 drops official support for Windows 98


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Akella
Дата 7.5.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



по крайней мере мои программы пашут на вынь98 smile 
PM MAIL   Вверх
CodeMonkey
Дата 7.5.2009, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Ну это зависит от того, что в программе используется. Я не помню сейчас ссылку, но где-то проскакивал вопрос, почему программа от D2007 не работает в Win98. В программу был кинут стандартный компонент, который использовал функцию, что появилась только в Win2000 (или в WinNT, не помню).


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
vl1639
Дата 7.5.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 17.12.2008

Репутация: нет
Всего: нет



Цитата

1. Устанавливаешь ли ты на чужой комп борландовский менеджер памяти? borlndmm.dll?
2. Устанавливаешь ли ты на чужой комп библионтеку gdiplus.dll?
3. Если ты используешь MIDAS, то также таскать с собой нужно и midas.dll.

С хозяином компа с 98-м общаюсь только телефоном и почтой, ничего ему не устанавливал, поскольку предполагалась автономная работа exe-шника. Об ошибке он сообщил только слишком общими словами - типа не запускается и т.п.  MIDAS, если это в смысле аудиоподдержки, не использую. Решил не использовать эмулированный 98, т.к. при этом могут оказаться задействованы средства основной системы, а раздобыть на время комп с 98-м. Код сообщить не могу - слишком большой и специфический, а выделять базовые элементы, так, чтоб работало  - нет времени. Попробую  Dependency Walker-ом проанализировать exe-шник. А кто-н пробовал - это реально работающее средство? Как раздобуду комп с 98-м сообщу что за ошибку выдает система.

PM MAIL   Вверх
dumb
Дата 8.5.2009, 04:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 3
Всего: 158



Цитата(vl1639 @  7.5.2009,  21:11 Найти цитируемый пост)
Решил не использовать эмулированный 98, т.к. при этом могут оказаться задействованы средства основной системы, а раздобыть на время комп с 98-м.
smile
решать надо после того, как варианты исследованы. прочитай хотя бы пару страниц из гугля про какой-нибудь vmware.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1254 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.