Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

Использование 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.037 c
4-1080579494
BorH
2004-03-29 20:58
2004.05.16
Список процессов


14-1082831865
Новичёк
2004-04-24 22:37
2004.05.16
Новости VCL


1-1083588888
Ivolg
2004-05-03 16:54
2004.05.16
RxLibiray


1-1083315877
Relaxxx
2004-04-30 13:04
2004.05.16
Как с строки удалить все пробелы???


8-1076311872
Новик
2004-02-09 10:31
2004.05.16
Мультиспектральные изображения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский