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

Вниз

Конвертация типов данных при вызове сишных 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.037 c
9-1074633038
Alex Storm
2004-01-21 00:10
2004.05.30
Создание ландшафта на GLScene


3-1083919010
Tugodym
2004-05-07 12:36
2004.05.30
Вопрос по фильтрации


4-1082162783
SPeller
2004-04-17 04:46
2004.05.30
Popup Window


1-1085036116
Loda
2004-05-20 10:55
2004.05.30
TAction


1-1084715381
RomeoGolf
2004-05-16 17:49
2004.05.30
Free и nil - как корректнее совместить?





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