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

Вниз

Конвертация типов данных при вызове сишных DLL   Найти похожие ветки 

 
Nk   (2004-05-18 00:46) [0]

Мастера, подскажите,  если в DLL, написанной на С функция объявлена так:
extern "C" int EC_DLL_EI DecodeF(char *iname, int Size, char restore=0);

как ее объявить в Delphi?
Я пытають так:
function DecodeF(ifname: PChar; CSize: integer; restore:byte):integer; cdecl; external "dllname.dll";

на получается ерунда :((  Не могу сообразить, во что должен превратиться С-шный Char ??


 
Fedia   (2004-05-18 05:25) [1]

Да, оказалось, что это на самом деле непросто. Хотя скорее всего у меня не хватает элементарных знаний.
Могу сказать, что если в C в качестве параметра функции задавать не указатель на строку, а массив символов, то в Delphi при вызове процедуры можно указывать параметр типа string.
Например процедуру, объявленную в Builder как
extern "C" __declspec(dllexport) AnsiString WINAPI FieldS(short int Number, char Delimiter, char Sourse[255]) можно вызвать из Delphi следующим образом
function FieldS(Number: word; Delimiter: String; Sourse: String): String; stdcall;
implementation
function FieldS; external "KCCM.dll" name "FieldS";
Может быть скоро кто-то из мастеров проснется и что-нибуть посоветует :)


 
KSergey ©   (2004-05-18 08:12) [2]

>  Nk   (18.05.04 00:46)
> на получается ерунда :((  Не могу сообразить, во что должен
> превратиться С-шный Char ??

char -> byte

А подробнее о ерунде можно? А за одно как вызываете, как переменные определяете, что в параметрах передаются... Как память под них выделяете (если надо)...

>  [1] Fedia   (18.05.04 05:25)
> Могу сказать, что если в C в качестве параметра функции
> задавать не указатель на строку, а массив символов, то в
> Delphi при вызове процедуры можно указывать параметр типа
> string.

Ой, только так не надо делать, ладно?


 
KSergey ©   (2004-05-18 08:14) [3]

Хотя немного обманываю
К char правильнее сопоставить Shortint, т.к. оно со знаком, а byte - беззнаковое целое.


 
Fedia   (2004-05-19 00:21) [4]

KSergey ©   (18.05.04 08:12) [2]
>Ой, только так не надо делать, ладно?
Если объяснишь почему или дашь ссылку где об этом можно почитать, и я пойму, что это правильно, то конечно не буду.
На сколько я понимаю в C переменная char s[255] - указатель на строку символов длиной 255. В Delphi переменная s: string - последовательность символов, с дополнительным байтом в начале, указывающим длину этом последовательности. Это фактически массив символов.
Как я показывал в примере [1] у меня есть функция в Dll, написанная на Builder, в котрой один из параметров char Sourse[255]. Когда эту функцию я вызываю из Delphi, то этот параметр я определяю так: Sourse: String. Функция работает корректно (правда на утечки памяти я ее не проверял).
Я только начинаю изучать Builder и С++, поэтому с удовольствием приму любую критику (лишь бы делу помогло).



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

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

Наверх




Память: 0.45 MB
Время: 0.04 c
4-1081943026
Сережа550
2004-04-14 15:43
2004.05.30
Сложная имитация клика левой кнопкой мышки в нужном окне


8-1079617174
TrollXP
2004-03-18 16:39
2004.05.30
Winamp Playlist


3-1083926709
Саша
2004-05-07 14:45
2004.05.30
Поиск записи в таблице


8-1079206208
novi
2004-03-13 22:30
2004.05.30
процедура реагирующая на положение указателя мыши


1-1084747745
Алекз
2004-05-17 02:49
2004.05.30
Три букви





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