Главная страница
    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.03 c
3-1082454033
Litva
2004-04-20 13:40
2004.05.16
Exel...


6-1080325224
Rezya
2004-03-26 21:20
2004.05.16
Перехват входящего и исходящего трафика


3-1082054430
td
2004-04-15 22:40
2004.05.16
onFilterRecord


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


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