Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Использование DLL из C++ в Delphi   Найти похожие ветки 

 
Goida ©   (2004-04-29 10:22) [0]

Каким образом должна быть объявлена экспортируемая функция в DLL, написанном на C++, чтобы эту функцию и библиотеку можно было использовать в Delphi?


 
Ega23 ©   (2004-04-29 10:24) [1]

Например так:

function PRRead:DWord; StdCall; External "ProxAPI.dll";
function PRSet(Ctrl:DWord;OnOff:DWord):DWord; External "ProxAPI.dll";
Только нужно чётко соглашение о вызовах соблюдать.


 
Goida ©   (2004-04-29 10:35) [2]

Нет, мне нужно объявление на C++. Или разницы, в общем, нет?


 
Ega23 ©   (2004-04-29 10:37) [3]

Ты же в Делфи собираешься использовать?


 
Андрей Сенченко ©   (2004-04-29 10:39) [4]

Ega23 ©   (29.04.04 10:37) [3]

Соглашение о вызовах в любом случае придется прописывать и там и там. Или я не прав ?


 
Ega23 ©   (2004-04-29 10:42) [5]

Соглашение о вызовах в любом случае придется прописывать и там и там. Или я не прав ?
Я о том и говорю, что нужно чётко соглашение о вызовах соблюдать.


 
Goida ©   (2004-04-29 10:46) [6]

Т.е. как объявленно в C++ не важно?


 
Юрий Зотов ©   (2004-04-29 11:25) [7]

> Goida ©   (29.04.04 10:46) [6]

Откройте справку и посмотрите, как объявлены функции API. Это и есть правильные сишные объявления функций в DLL, которые запросто можно вызывать и из Delphi, и вообще из чего угодно.

Как вызывать их из Delphi - см. кучу примеров в Windows.pas. Сопоставьте объявление функции в справке с ее декларацией в Windows.pas - сразу все поймете.


 
Goida ©   (2004-04-29 11:34) [8]


> Юрий Зотов

Спасибо.


 
Григорьев Антон   (2004-04-29 12:51) [9]

Только не забудьте указать для функции при описании на C++, что она extern "C", а то будет декорация имени.


 
Goida ©   (2004-04-29 12:57) [10]


> Григорьев Антон


> будет декорация имени

Это что такое?


 
Григорьев Антон   (2004-04-29 13:17) [11]

Декорация имён - это когда имя, под которым функция реально экспортируется, отличается от того, под которым она объявлена. Это характерно для C++. Например, функция SomeFunc может превратиться во что-то вроде __SomeFunc@43@334_34 - так компилятору удобнее.


 
PVOzerski ©   (2004-04-29 13:26) [12]

Опасность декорации имен (вот, значит, как по-русски будет name mangling :^) ) более актуальна при статической линковке, а не при работе с dll, так как во 2-м случае, есть возможность объявить алиас имени ( procedure proc;external "dll.dll" name "_proc_???FFF$$$@@@!@#DD"  )или использовать вообще для вызова ее ординал (индекс).


 
Goida ©   (2004-04-29 13:29) [13]

Уф бр-р...



Страницы: 1 вся ветка

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
7-1081255673
Timon
2004-04-06 16:47
2004.05.16
Как программно создать пользователя с правами админа?


7-1081419928
Aleksandr
2004-04-08 14:25
2004.05.16
Как можно получить снимок со всего экрана (по аналогу PrintScrn)?


7-1081068563
_dEMOn
2004-04-04 12:49
2004.05.16
LPT Порт


9-1072642249
Igoryok
2003-12-28 23:10
2004.05.16
PolyBezier или как сделать кривую как в нормально графическом рет


1-1083307919
Master Paleva
2004-04-30 10:51
2004.05.16
Делфи и Флэш