Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Посоветуйте как лучше поступить

11K
24 ноября 2005 года
PTB
9 / / 04.11.2005
Раньше DLL не писал, а сейчас вот озаботился этой темой. Проблема такая:

Есть приложение, в нем используется некоторая функция. Функция будет часто меняться. Поскольку не хочется после каждой замены заставлять людей скачивать объемный exe-шник в котором поменялась только одна функция, то хочется эту функцию вынести в DLL и пускай люди скачивают только новую DLL.

Тогда возникакют вопросы. Можно ли в функцию которая будет в DLL передать указатель на, скажем, TEdit в основном приложении? Ну что бы она в ходе своей работы туда что-то сливала.

И еще. Очень важен вопрос объема. Само приложение линкуется статически со всеми VCL'нами штуками. Таким образом объем получаемого EXE-шника состоит из: объем стандартных VCL + объем самого приложения. В DLL будет только объем функции или туда второй раз попадут VCL? Как не дублировать стандартные борландовские бибилиотеки внутри EXE-шника и внутри DLL? т.е. хочется сделать DLL как можно меньше по объему.

Сорри если я что-то глупое спросил :-)
362
24 ноября 2005 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by PTB
Можно ли в функцию которая будет в DLL передать указатель на, скажем, TEdit в основном приложении? Ну что бы она в ходе своей работы туда что-то сливала.



А чего же нельзя, можно.

Цитата:
Очень важен вопрос объема. Само приложение линкуется статически со всеми VCL'нами штуками. Таким образом объем получаемого EXE-шника состоит из: объем стандартных VCL + объем самого приложения. В DLL будет только объем функции или туда второй раз попадут VCL?



Обязательно попадут, т.к. при компиляции DLL совершенно неизвесно какие стандартные (VCL) библиотеки попадут в главный екзешник компилятор вынжден встраивать в DLL те функции, которые она использует.

Цитата:
Как не дублировать стандартные борландовские бибилиотеки внутри EXE-шника и внутри DLL? т.е. хочется сделать DLL как можно меньше по объему.



Только не использовать VCL в DLL, мне думается.

11K
24 ноября 2005 года
PTB
9 / / 04.11.2005
Цитата:


Обязательно попадут, т.к. при компиляции DLL совершенно неизвесно какие стандартные (VCL) библиотеки попадут в главный екзешник компилятор вынжден встраивать в DLL те функции, которые она использует.



Только не использовать VCL в DLL, мне думается.



Не получается без VCL :-(

Хорошо тогда так: А можно скажем собрать EXE динамически. Так что бы все необходимые стандартные VCL бибилотеки лежали в отдельной DLL или еще как. В общем отдельными файлами в той же директории что и EXE-шник. И нашу DLL-ку тоже собрать динамически. В результате будем иметь:

маленький EXE-шник, маленькую нашу DLL-ку и еще некоторое число файлов в которых лежат стандартные VCL которые нашим EXE-шником и нашей DLL-кой используются? Вроде при таком подходе дублирования не должно быть?

11K
24 ноября 2005 года
PTB
9 / / 04.11.2005
Еще попробовал сейчас собрать проект в котором почти ничего нет. Используются только стандартные VCL.

В свойствах проекта снял галочку напротив "Use dynamic RTL" и напротив "Build with runtime packages" а в результате получился EXE-шник объемом 1.67 метра. Нет я конечно понимаю статически слинковался, но почему так много? Вроде раньше гораздо меньше получалось в таких случаях. Как узнать, не влинковывается ли в него чего не нужного?
9.8K
24 ноября 2005 года
bqserg
56 / / 27.09.2005
Лишнее на врядли линкуется, но можешь все таки проверить. А размер гигантскими скачками обычно происходит из-за картинок на форме...

А нафига тебе чтобы DLL рулил Edit'ом??? Код который вызывает функцию из него и сам отлично может справиться с этим, заполнив его данными, которые вернула функция.
11K
24 ноября 2005 года
PTB
9 / / 04.11.2005
Цитата:
Originally posted by bqserg
Лишнее на врядли линкуется, но можешь все таки проверить. А размер гигантскими скачками обычно происходит из-за картинок на форме...



Это понятно. Дело в том, что с галками объем 680 Кб, снимаю галки становится 1.67 Мб. Т.е. это не картинки -- с приложением ничего не делается. Откуда целый Мб бибилиотек не понятно.

Вопрос как раз в том КАК проверить?

Цитата:

А нафига тебе чтобы DLL рулил Edit'ом??? Код который вызывает функцию из него и сам отлично может справиться с этим, заполнив его данными, которые вернула функция.



Если функция работает долго, то бывает неплохо в это время сыпать какие-нибудь сообщения пользователю.

1
25 ноября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by PTB
Это понятно. Дело в том, что с галками объем 680 Кб, снимаю галки становится 1.67 Мб. Т.е. это не картинки -- с приложением ничего не делается. Откуда целый Мб бибилиотек не понятно.


Тема создания длл и опций компилятора/линкера обсуждалась на форуме не однократно. Используй поиск - в одной из подобных тем приводилось подробное обоснование почену НЕ НУЖНО снмать галки :) Посмотри - многие вопросы для тебя будут понятней. Как правило в твоем случае для заполнения эдита передавать в функцию указатель на него абсолютно не нужно. Все что нужно - передать туда хендлер. И использовать функцию напримерSetWindowsText.

Цитата:
Originally posted by PTB


Если функция работает долго, то бывает неплохо в это время сыпать какие-нибудь сообщения пользователю.


Определить набор сообщений в своем приложении и посылать их главному окну.
Пример работы с сообщениями ты можешь найти например в $BCB\Examples\App\TrayIcon

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог