| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > Несколько вопросов о DLL |
| Автор: Foley 13.3.2006, 13:56 | ||||
| Несколько вопросов про DLL: 1. Как мне подмтавить в ДЛЛ свое значение? (см. код) 2. Что за ошибка выскакивает при использовании String в ДЛЛ: Invalid pointer operation? Теория: 3. Чем отличается статистическая загрузка от динамической? 4. Преимущества использования ДЛЛ. 5. Операторы ДЛЛ (или как правильно называются) типа stdcall, far и т.п. с описанием на русском языке. 3, 4, 5 если можно дайте ссылки, только чтоб там понятно описано было. код ДЛЛ
код юниты:
|
| Автор: Alexeis 13.3.2006, 14:17 | ||||
после создания dll появляетя текст
который говорит о том что нужно подключить модуль ShareMem для передачи строк в качестве параметров и получения их в виде результата(для экспортируемых функций) |
| Автор: Matematik 13.3.2006, 14:22 |
| 1. Уточни вопрос 2. Когда создаеь DLL там написано { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } т.е. чтобы использовать тип string надо добавить в uses проекта программы и dll модуль ShareMem (поставить его первым), плюс к этому нужна еще dll BORLNDMM.DLL а вообще лучше вместо String использовать PChar 3. Статист. загружается при старте программы, выгружается с ней вместе динамическая - сам отвечаешь за загрузку и выгрузку 4. написание плугинов и тд и тп 5. Есть такая вещь как поиск. ya.ru rambler.ru итд http://ad.cctpu.edu.ru/SSP/Prof/Glava28/Index4.html а там Далее Далее ... |
| Автор: Alexeis 13.3.2006, 14:28 | ||
Статическую не нужно ни загружать ни выгружать. Динамическая загрузка подразумевает не только загрузку и выгрузку но и определение адресов используемых функций Заморочки много а эффект есть если используются много разных библиотек и требуются они в разное время работы программы или редко. Например при создании плагинов. Грузится в начале ядро а библиотеки по мере необходимости. Хороший пример статической загрузки это ядро (kernel.dll ,gdi.dll и тд )windows, которое грузится автоматически при запуске любой программы на delphi (или почти любой). |
| Автор: Yanis 13.3.2006, 14:34 |
| Странные какие то у тебя dll'ки |
| Автор: Alexeis 13.3.2006, 14:51 |
| Yanis, ладно уже ошибся чуток. Вот более точно advapi32 = 'advapi32.dll'; kernel32 = 'kernel32.dll'; mpr = 'mpr.dll'; version = 'version.dll'; comctl32 = 'comctl32.dll'; gdi32 = 'gdi32.dll'; user32 = 'user32.dll'; |
| Автор: Yanis 13.3.2006, 15:02 |
| alexeis1, Не в обиду сказано ;) |
| Автор: Foley 13.3.2006, 23:10 | ||
| ну вот
и воопще возможно ли это? Со вторым вопросом я разобрался...3, 4 понял объяснение а вот про stdcall по ссылке ниче не понятно, но все равно спасибо Добавлено @ 23:12 ой поторопился понял все... |
| Автор: Foley 15.3.2006, 23:36 | ||||
все понял сам где собака зарыта:
а надо было:
правильно говроится, что чем глупее ошипка тем труднее ее найти... Всем спасибо... |