Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.57 MB
Время: 0.03 c
2-1174129921
DaveRT
2007-03-17 14:12
2007.04.08
Передача информации о цвете


15-1174142840
Ringo
2007-03-17 17:47
2007.04.08
Легальный способ потерять Российскую Сибирь и отдаться Китаю.


3-1169032798
Rule
2007-01-17 14:19
2007.04.08
Вопрос знатокам MSSQL Server 2005/2000


15-1173772062
In/Out
2007-03-13 10:47
2007.04.08
Регрессионный анализ???


15-1172053340
IMHO
2007-02-21 13:22
2007.04.08
Сталин был велик?