Посоветуйте как лучше поступить
Есть приложение, в нем используется некоторая функция. Функция будет часто меняться. Поскольку не хочется после каждой замены заставлять людей скачивать объемный exe-шник в котором поменялась только одна функция, то хочется эту функцию вынести в DLL и пускай люди скачивают только новую DLL.
Тогда возникакют вопросы. Можно ли в функцию которая будет в DLL передать указатель на, скажем, TEdit в основном приложении? Ну что бы она в ходе своей работы туда что-то сливала.
И еще. Очень важен вопрос объема. Само приложение линкуется статически со всеми VCL'нами штуками. Таким образом объем получаемого EXE-шника состоит из: объем стандартных VCL + объем самого приложения. В DLL будет только объем функции или туда второй раз попадут VCL? Как не дублировать стандартные борландовские бибилиотеки внутри EXE-шника и внутри DLL? т.е. хочется сделать DLL как можно меньше по объему.
Сорри если я что-то глупое спросил :-)
Можно ли в функцию которая будет в DLL передать указатель на, скажем, TEdit в основном приложении? Ну что бы она в ходе своей работы туда что-то сливала.
А чего же нельзя, можно.
Обязательно попадут, т.к. при компиляции DLL совершенно неизвесно какие стандартные (VCL) библиотеки попадут в главный екзешник компилятор вынжден встраивать в DLL те функции, которые она использует.
Только не использовать VCL в DLL, мне думается.
Обязательно попадут, т.к. при компиляции DLL совершенно неизвесно какие стандартные (VCL) библиотеки попадут в главный екзешник компилятор вынжден встраивать в DLL те функции, которые она использует.
Только не использовать VCL в DLL, мне думается.
Не получается без VCL :-(
Хорошо тогда так: А можно скажем собрать EXE динамически. Так что бы все необходимые стандартные VCL бибилотеки лежали в отдельной DLL или еще как. В общем отдельными файлами в той же директории что и EXE-шник. И нашу DLL-ку тоже собрать динамически. В результате будем иметь:
маленький EXE-шник, маленькую нашу DLL-ку и еще некоторое число файлов в которых лежат стандартные VCL которые нашим EXE-шником и нашей DLL-кой используются? Вроде при таком подходе дублирования не должно быть?
В свойствах проекта снял галочку напротив "Use dynamic RTL" и напротив "Build with runtime packages" а в результате получился EXE-шник объемом 1.67 метра. Нет я конечно понимаю статически слинковался, но почему так много? Вроде раньше гораздо меньше получалось в таких случаях. Как узнать, не влинковывается ли в него чего не нужного?
А нафига тебе чтобы DLL рулил Edit'ом??? Код который вызывает функцию из него и сам отлично может справиться с этим, заполнив его данными, которые вернула функция.
Лишнее на врядли линкуется, но можешь все таки проверить. А размер гигантскими скачками обычно происходит из-за картинок на форме...
Это понятно. Дело в том, что с галками объем 680 Кб, снимаю галки становится 1.67 Мб. Т.е. это не картинки -- с приложением ничего не делается. Откуда целый Мб бибилиотек не понятно.
Вопрос как раз в том КАК проверить?
А нафига тебе чтобы DLL рулил Edit'ом??? Код который вызывает функцию из него и сам отлично может справиться с этим, заполнив его данными, которые вернула функция.
Если функция работает долго, то бывает неплохо в это время сыпать какие-нибудь сообщения пользователю.
Это понятно. Дело в том, что с галками объем 680 Кб, снимаю галки становится 1.67 Мб. Т.е. это не картинки -- с приложением ничего не делается. Откуда целый Мб бибилиотек не понятно.
Тема создания длл и опций компилятора/линкера обсуждалась на форуме не однократно. Используй поиск - в одной из подобных тем приводилось подробное обоснование почену НЕ НУЖНО снмать галки :) Посмотри - многие вопросы для тебя будут понятней. Как правило в твоем случае для заполнения эдита передавать в функцию указатель на него абсолютно не нужно. Все что нужно - передать туда хендлер. И использовать функцию напримерSetWindowsText.
Если функция работает долго, то бывает неплохо в это время сыпать какие-нибудь сообщения пользователю.
Определить набор сообщений в своем приложении и посылать их главному окну.
Пример работы с сообщениями ты можешь найти например в $BCB\Examples\App\TrayIcon