Главная страница
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.061 c
6-1079933984
alin
2004-03-22 08:39
2004.05.16
IdUDPServer в dll


6-1080639145
WondeRu
2004-03-30 13:32
2004.05.16
Cookies (CGI in Delphi)


6-1079985711
it
2004-03-22 23:01
2004.05.16
Отловить DialUp соединение


1-1083064482
KapitAl
2004-04-27 15:14
2004.05.16
ScrollBar


14-1083007266
GEN++
2004-04-26 23:21
2004.05.16
Раскинем карты и ...... погадаем.