импорт из dll в windows и др..

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

импорт из dll в windows и др..

Сообщение ZerstoreN » 30.06.2006 22:26:38

Поясните пожалуйста - недавно решил перейти на fpc с virtualpascal, пока многие вещи неприятно удивляют. Работаю под WinXP
1. отладчик не работает совсем (segmentation fault в начале почти любой программы, некоторые запускаются через раз-два (3, 4, .... ))
2. IDE периодически забывает настройки (хранящиеся в bin\fp.ini), (при изменении некоторых параметров пути поиска стираются)
3. Линкер связывает ВСЕ внешние функции, а не только те которые используются (как делает virtualpascal), в результате чего размер исп. файла значительно увеличивается отн. производимого vp, (в 10-20 раз, что достаточно существенно с учетом необходимости разработки для PocketPC) и к тому же если какая-то забытая неиспользуемая длл не существует, приложение не может запуститься.
В документации про это ничего не написано. Вообще документация скудна и содержит в основном записи вида "smartlink - это smart link" :\
4. Буфер обмена в IDE не сопряжен с буфером windows, что тоже весьма удручает..


неужели и правда лыжи не едут? не хотелось бы верить, может, подскажете что-нибудь?
ZerstoreN
новенький
 
Сообщения: 53
Зарегистрирован: 30.06.2006 12:05:01

Сообщение Romtek » 01.07.2006 00:47:19

ZerstoreN, к тебе несколько вопросов:

как ты устанавливал Free Pascal?
какую версию пробовал?

> к тому же если какая-то забытая неиспользуемая длл не существует, приложение не может запуститься.
динамическую загрузку DLL пробовал?

> Буфер обмена в IDE не сопряжен с буфером windows, что тоже весьма удручает..
Copy to Windows
Paste from Windows

A unit that is compiled in the {$SMARTLINK ON} state will be compiled in such a way that it can be used for smartlinking. This means that the unit is chopped in logical pieces: each procedure is put in it’s own object file, and all object files are put together in a big archive. When using such a unit, only the pieces of code that you really need or call, will be linked in your program, thus reducing the size of your executable substantially.

Beware: using smartlinked units slows down the compilation process, because a separate object file must be created for each procedure. If you have units with many functions and procedures, this can be a time consuming process, even more so if you use an external assembler (the assembler is called to assemble each procedure or function code block separately).

The smartlinking directive should be specified before the unit declaration part:
{$SMARTLINK ON}

Unit MyUnit;

Interface
...

This directive is equivalent to the -Cx command-line switch.

Взято из $SMARTLINK : Use smartlinking

Smartlink — это технология, когда к проекту подключается только то, что действительно необходимо, а не модули целиком. Чтобы это работало, сами модули должны быть скомпилированы с директивой {$smartlink on} или ключом командной строки -CX. Иногда, особенно в нестабильных версиях, стандартные модули скомпилированы иначе. Так это или нет, можно узнать поискав файлы вида libp<имя модуля>.a — если такой файл существует, то модуль скомпилирован правильно. Кроме того, следует проверить опции компилятора в командной строке и файле fpc.cfg: чтобы компилятор старался использовать smartlink везде, где это возможно, должна использоваться опция -XX.
Что делать, если соответствующий файл не найден? Лучший способ — скачать и перекомпилировать с нужными опциями RTL, что, однако, требует некоторого понимания структуры исходников FPC и принципов его работы… Более простой способ — поместить в каталог проекта нужный модуль (например sysutils.pp), а так же .inc-файлы, которые он использует, и выставить в нем соответствующую директиву. Главный недостаток этого способа — с модулем System такое не пройдет, а он «весит» более 100 килобайт.

Взято из http://freepascal.ru/article//freepasca ... 520001454/

Дополнительно:
Smartlinking
Аватара пользователя
Romtek
постоялец
 
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган

Сообщение ZerstoreN » 01.07.2006 13:30:40

smartlink относится к модулям а не к длл насколько я понимаю, по кр. мере в vp было так.
версия 2.0.2, ставил инсталером.
динамическая загрузка - loadlibrary вручную?
ZerstoreN
новенький
 
Сообщения: 53
Зарегистрирован: 30.06.2006 12:05:01


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 84

Рейтинг@Mail.ru
cron