Текущий архив: 2007.04.08;
Скачать: CL | DM;
Вниз
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;
Скачать: CL | DM;
Память: 0.55 MB
Время: 0.038 c