Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Вниз

C++Builder. Реально ли не таскать за собой DLL?   Найти похожие ветки 

 
DevilDevil ©   (2007-03-15 12:07) [0]

Здравствуйте.

Вот пару часов назад спорил с начальником ( он в Билдере профи! ) : можно ли взять обычную DLL, прилинковать её к своему exe нехитрым способом и больше не париться.

Я ответил "не верю". Говорю, это возможно только в VisualC++ и то с помощью платной утилиты "Dll2Lib", а в Билдере такое невозможно.

Неужели я настолько отстал от жизни, незнаю элементарных вещей, отстаиваю своё вкорне неправильное мнение?

P.S. Спасибо за аргументацию!


 
GanibalLector ©   (2007-03-15 12:11) [1]

Не знаю как в  Билдере,а в Delphi делаю так.
утилита brcc32

+


function UnZip(const FileName:String):Boolean;
  var hRes,hResData:THandle;
      Mem:Pointer;
      hFile:Integer;
begin
 Result:=False;
 hRes:=FindResource(hInstance,LibName,RT_RCDATA);
 if hRes<>0 then
 begin
   hResData:=LoadResource(HInstance,hRes);
   if hResData<>0 then
   begin
     Mem:=LockResource(hResData);
     hFile:=FileCreate(FileName);
     if hFile<>-1 then
     begin
       if FileWrite(hFile,Mem^,SizeOfResource(hInstance,hRes))<>-1 then
        Result:=True;
       FileClose(hFile);
     end;
   end;
 end;
end;


 
DevilDevil ©   (2007-03-15 12:13) [2]

> GanibalLector ©   (15.03.07 12:11) [1]

имхо не к месту написал!


 
Desdechado ©   (2007-03-15 12:23) [3]

> имхо не к месту написал!
Это, конечно, не прилинковать в прямом смысле, но таскать с собой не надо.


 
DevilDevil ©   (2007-03-15 12:25) [4]

> Desdechado ©   (15.03.07 12:23) [3]

Он [начальник] говорил "прилинковать" в прямом смысле!


 
Desdechado ©   (2007-03-15 12:33) [5]

Хотя ресурс в EXE именно линковщик запихивает.


 
DevilDevil ©   (2007-03-15 12:35) [6]

> Desdechado ©   (15.03.07 12:33) [5]

А если по делу? Слышал ли кто либо вообще о такой возможности в Билдере? Или может быть слышал, что в Билдере так сделать невозможно впринципе?


 
umbra ©   (2007-03-15 12:40) [7]

нехитрым способом и так прилинковать можно:
function Foo(i: integer): integer; external "mydll.dll";

в таблицу импорта ссылку тоже линковщик пишет. Так что у шефа лучше уточнить, что он имеет в виду


 
DevilDevil ©   (2007-03-15 12:44) [8]

> Так что у шефа лучше уточнить, что он имеет в виду

Господа! Поймите, нет никакого подвоха, всё серьёзно: просто взять и прилинковать Dll и всё. Как lib.


 
Desdechado ©   (2007-03-15 12:46) [9]

Из законов Мерфи:
Если маститый ученый утверждает, что нечто возможно, то он почти наверняка прав. Если же он утверждает, что нечто невозможно, то вероятнее всего он ошибается.


 
homm ©   (2007-03-15 12:46) [10]

> Вот пару часов назад спорил с начальником ( он в Билдере
> профи! ) : можно ли взять обычную DLL, прилинковать её к
> своему exe нехитрым способом и больше не париться.

Ну а у начальника спросить КАК это сделать, не догадался? Или он в пещере сидит, глазом сверкает, загадки загадывает, а отгадки не говорит?


 
Desdechado ©   (2007-03-15 12:47) [11]

> всё серьёзно: просто взять и прилинковать Dll и всё. Как lib.
Это твое понимание вопроса, а не твоего шефа.


 
umbra ©   (2007-03-15 12:54) [12]

"просто взять" нельзя. lib - это набор файлов obj, т.е. результатов компиляции модулей (именно компиляции, без линковки), и служебной информации. При статической линковке эти obj-файлы просто добавляются в секцию кода приложения. dll - это исполняемый файл, уже линкованный. Т.е. без внешних утилит просто прилинковать dll как lib невозможно


 
DevilDevil ©   (2007-03-15 13:04) [13]

> umbra ©   (15.03.07 12:54) [12]

Но для того чтобы использовать Dll, в Си надо создать соответсвующий lib. Насколько я понял, он этот путь и имеет ввиду: т.е. нужно создать lib и уже Dll не нужна.


 
homm ©   (2007-03-15 13:06) [14]

> Насколько я понял, он этот путь и имеет ввиду
Опять? Еще не сходил не спросил у него самого, что он имеет ввиду?


 
DevilDevil ©   (2007-03-15 13:14) [15]

> homm ©   (15.03.07 13:06) [14]

Чтож ты датошный то такой? Буквоед.
Общался в течение нескольких минут. Насколько я понял он имеет ввиду линковку Dll через Lib.


 
umbra ©   (2007-03-15 13:16) [16]


> т.е. нужно создать lib и уже Dll не нужна.
>

lib - это библиотека для статической линковки. Из нее можно сделть длл - библиотеку динамической линковки. Т.е. lib - это более ранний этап, чем длл. lib появляется после компиляции исходников в машинный код. А длл появляется, грубо говоря, после линковки lib и оформления результата линковки как исполняемого файла. При этом теряется часть информации и обратное преобразование длл в lib становится нетривиальной (и, по-моему, не всегда разрешимой) задачей.


 
DevilDevil ©   (2007-03-15 13:17) [17]

> umbra ©   (15.03.07 13:16) [16]

Утверждаю: в Си, чтобы использовать Dll, нужно подключать Lib-ы !!!


 
umbra ©   (2007-03-15 13:19) [18]


> в Си, чтобы использовать Dll, нужно подключать Lib-ы !!!

а  в С что, LoadLibrary и GetProcAddress уже не работают?


 
homm ©   (2007-03-15 13:23) [19]

> Насколько я понял он имеет ввиду линковку Dll через Lib.
Следующий этап: Подойти спросить как он собирается линковать к билдеру Lib файлы.


 
homm ©   (2007-03-15 13:24) [20]

Просто не понимаю проблемы, почему если человек говорит что может что-то сделать, ты здесь спрашиваешь КАК он собирается это сделать...


 
palva ©   (2007-03-15 13:24) [21]

> т.е. нужно создать lib и уже Dll не нужна.
Если есть исходники, то вместо dll действительно можно немного поколдовав создать lib, который будет включать в себя тот код, который раньше был в dll. В этом случае dll, действительно, не нужна. Но обычно мы имеем lib, которая создается параллельно созданию dll и содержит интерфейсный код для связи с dll при статическом подключении dll в билдере. В этом случае без dll никак не обойтись, ее нужно такскать вместе с exe-файлом.


 
Kabanon   (2007-03-15 13:26) [22]

DevilDevil

Можно прилинковать не DLL, а ее библиотеку импорта, как уже говорилось.
Библиотеку импорта можно получить для DLL с помощью улититы implib.
Линковка библиотеки импорта нужна для того, чтобы не использовать функции DLL динамически (с помощью GetProcAddress).
Но как вы понимаете, это чревато ошибкой при запуске приложения, в случае если dll отсутствует.
Поэтому, если dll может отсутствовать, для обеспечения работоспособности приложения нужно использовать ее динамически.


 
DevilDevil ©   (2007-03-15 13:38) [23]

> umbra ©   (15.03.07 13:19) [18]

не стоит заниматься буквоедством, см [21], [22]

> homm ©   (15.03.07 13:24) [20]
> Просто не понимаю проблемы, почему если человек говорит
> что может что-то сделать, ты здесь спрашиваешь КАК он собирается
> это сделать..

Если беспроблемная линковка Dll в Билдере является давно известным фактом, то помоему не имеет смысла позориться. Чтобы подстраховаться, решил поинтересоваться у Мастеров.

Как я вижу, все вы придерживаетесь моей позиции...


 
umbra ©   (2007-03-15 13:45) [24]


> не стоит заниматься буквоедством

я попытался Вам объяснить, почему, по моему мнению, в принципе нельзя прилинковать dll как lib без сторонних утилит. А Вы в посте №17 высказали заведомо ложное утверждение. Где тут буквоедство, я не понял.


 
homm ©   (2007-03-15 13:46) [25]

> Если беспроблемная линковка Dll в Билдере является давно
> известным фактом, то помоему не имеет смысла позориться.
> Чтобы подстраховаться, решил поинтересоваться у Мастеров.
Подстраховался? :) Иди расспрашивой, интересно все-же :)


 
tesseract ©   (2007-03-15 13:48) [26]


> Утверждаю: в Си, чтобы использовать Dll, нужно подключать
> Lib-ы !!!


С чего это? LoadLibrary там нормально работает.


 
roottim ©   (2007-03-15 13:56) [27]


umbra ©   (15.03.07 13:45) [24]
>  без сторонних утилит


DevilDevil © [1]
> омощью платной утилиты "Dll2Lib

помоему он указал что получает Lib из dll.. а после его

просто статически линкует в приложение..

но почему в билдер этот lib нельзя ?
 либо lib такой.. срешел фо визулСИ либо одно из двух


 
Kabanon   (2007-03-15 14:06) [28]

roottim ©   (15.03.07 13:56) [27]

BCB и VS используют разные форматы lib-файлов, OMF и COFF соответственно. Отсюда и неразбериха.


 
Думкин ©   (2007-03-15 14:11) [29]

>  срешел фо визулСИ либо одно из двух


давно так не задумывался.


 
Rouse_ ©   (2007-03-15 14:38) [30]

Можно и в Дельфи, только свой загрузчик писать нужно...


 
Чапаев ©   (2007-03-15 14:46) [31]

> [9] Desdechado ©   (15.03.07 12:46)
Это Артур Кларк сказал.

Народ, да вы чё развели такую ветку? Ясно ж, что сей воспитанник Флёнова и его начальник хотят в exe запихнуть код из некой dll, а не просто импортировать функции. %-)


 
wicked ©   (2007-03-15 17:00) [32]

бррр, развели тут....
мож его шеф имел в виду это - http://www.rsdn.ru/article/baseserv/peloader.xml ?
а вот эти разговоры уже на мозгах навязают - "возможно только в визуал си", "в билдере"...
DevilDevil, матчасть учи


 
DevilDevil ©   (2007-03-15 17:02) [33]

> С чего это? LoadLibrary там нормально работает.

ещё один...

> Подстраховался? :) Иди расспрашивой, интересно все-же :)

Вечером сёдня спрошу может. Момент надо подловить - слишком он сегодня занятой и злой. ... А ещё на пиво надо поспорить :)

> но почему в билдер этот lib нельзя ?  либо lib такой.. срешел
> фо визулСИ либо одно из двух


ну во первых, да, Kabanon [28] (с), даже конвертер форматов не помогает. Кроме того пробовал TASM-овский obj-ы в lib собрать, так Delphi отказывается его [ lib ] линковать :(

> Чапаев ©   (15.03.07 14:46) [31]
> > [9] Desdechado ©   (15.03.07 12:46)Это Артур Кларк сказал.
> Народ, да вы чё развели такую ветку? Ясно ж, что сей воспитанник
> Флёнова и его начальник хотят в exe запихнуть код из некой
> dll, а не просто импортировать функции. %-)

Василий Иваныч, неужели у тебя снова возникло желание о Флёнове поговорить ? =)

> Rouse_ ©   (15.03.07 14:38) [30]
> Можно и в Дельфи, только свой загрузчик писать нужно...


:) Я даже больше скажу (читать вторую часть) :
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1294

P.S. Devil = DevilDevil = Мозулёв Дмитрий.


 
homm ©   (2007-03-15 17:17) [34]

Давным-давно, в начале 90х, будучи студентом Челябинского Технического Университета (специальность ЭВМ), Евгений Рошал (будущий автор "WinRar" и "FAR") решил создать архиватор.
Если мне не изменяет память, тогда наш университет ЧПИ назывлся (Челябинский Политихнический) А может уже и ЮУрГУ.


 
DevilDevil ©   (2007-03-15 17:33) [35]

> homm ©   (15.03.07 17:17) [34]
> Давным-давно, в начале 90х, будучи студентом Челябинского
> Технического Университета (специальность ЭВМ), Евгений Рошал
> (будущий автор "WinRar" и "FAR") решил создать архиватор.
> Если мне не изменяет память, тогда наш университет ЧПИ назывлся
> (Челябинский Политихнический) А может уже и ЮУрГУ.


Честно говоря, так и не понял, что ты имел ввиду.

P.S. а я вообще в Нижнем Новгороде живу, мне пофик :)


 
homm ©   (2007-03-15 17:43) [36]

Статья твоя? Исправляй название университета! :) Он учился в ЧПИ, а не то что ты там написал.


 
DevilDevil ©   (2007-03-15 17:54) [37]

> homm ©   (15.03.07 17:43) [36]

Фраза "Челябинского Технического Университета (специальность ЭВМ)"(с) не моя - из какого то интервью с его [Рошалом] участием. Так что, если сможешь, прости, но проверять подлиность этих данных я сейчас не могу. Да и не об этом статья. Лучше ты напиши статью о его студентческой жизни, там наверняка о уже нём легенды ходят.


 
DevilDevil ©   (2007-03-15 17:57) [38]

может где нибудь здесь :)
http://www.google.ru/search?hl=ru&q=%D0%95%D0%B2%D0%B3%D0%B5%D0%BD%D0%B8%D0%B9+%D0%A0%D0%BE%D1%88%D0%B0%D0%BB+%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D1%8C%D1%8E&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.046 c
15-1173957819
alex_***
2007-03-15 14:23
2007.04.08
System error. Code 1410. Class already exists


2-1174054611
Tru
2007-03-16 17:16
2007.04.08
Кнопки


15-1173556275
ArtemESC
2007-03-10 22:51
2007.04.08
Где найти?


2-1173314268
Wind
2007-03-08 03:37
2007.04.08
В несколько колонок


15-1173873526
nimp
2007-03-14 14:58
2007.04.08
Ошибка в дельфях





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский