Dll?

Модераторы: Duncon, Naeel Maqsudov, Хыиуду, Игорь Акопян

Ответить
Аватара пользователя
Oleg_Rus
Сообщения: 330
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

23 май 2007, 05:54

Подскажите, как создаются и подключаются Dll-ки в Dlphi?
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

23 май 2007, 09:45

Oleg_Rus писал(а):Подскажите, как .... подключаются Dll-ки в Dlphi?
Подключаются с помощью создания модуля(unit)-"переходника". Разумеется, надо знать именя функций, экспортирунемых DLL-ю, набор их параметров и их calling convention.

Примером такого модуля-переходника может служить дельфийный Windows.pas. Хотя там много всего и, быть может, нелегко будет понять, что к чему.
Если коротко, то вот такой более простой пример.

Скажем, некоторая MyCPPdll.DLL экспортирует функцию DoSomething,
реализованную как:

Код: Выделить всё

  long WINAPI DoSomething (
                  ULONG   uiMode,
                  void*     pData,
                  char    *pacMsg
     );

Тогда модуль-переходник будет выглядеть так:

Код: Выделить всё

unit MyDLL_U;

 //****************************************************
                     interface
 //****************************************************

 function DoSomething (
                  uiMode : Longword;
                  pDIB : pointer;
                  pacMsg : PChar) : longint; stdcall;

 //****************************************************
                   implementation
 //****************************************************

 function DoSomething (
                  uiMode : Longword;
             var  pDIB : pointer;
                  pacMsg : PChar) : longint;
     stdcall; external 'MyCPPdll.DLL' name 'DoSomething';

end.
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

23 май 2007, 10:28

Если создать длл - открыть новый проект Дельфи, потом открыть dpr-файл, удалить оттуда все и записать примерно так:
library moya_biblioteka;

interface
procedure helloworld;

exports helloworld name 'helloworld' index 1

implementation
procedure helloworld;
begin showmessage('Hello, World!'); end;

end.

После компиляции образуется файл moya_biblioteka.dll

Потом в своей программе пишем:

procedure helloworld; external; 'moya_biblioteka.dll';

и можно пользоваться процедурой.
Если где-то напутал в синтаксисе - не взыщите
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

23 май 2007, 13:26

в дополнение....
&quot писал(а):открыть dpr-файл, удалить оттуда все и записать примерно т
если это сделать через File/New... То в теле проекта можно обнаружить весьма полезный начинающему коментарий ;)
Изображение
Ответить