Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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