Главная страница
    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.47 MB
Время: 0.039 c
4-1080678131
i-s-v
2004-03-31 00:22
2004.05.16
Сообщения PopupMenu


6-1080543470
Sodom
2004-03-29 10:57
2004.05.16
Upload файла на сервер через PHP-скрипт


1-1083610229
apel
2004-05-03 22:50
2004.05.16
использование модуля на С++


3-1082013742
Mamed
2004-04-15 11:22
2004.05.16
Izmeneniya v Clienddataset


1-1083157764
killer
2004-04-28 17:09
2004.05.16
Сортировка в StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский