Главная страница
    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.45 MB
Время: 0.04 c
3-1084091423
Romeo
2004-05-09 12:30
2004.05.30
Пробема с "INSERT INTO"


6-1081443598
Coder
2004-04-08 20:59
2004.05.30
Indy


1-1084567919
LORDMAXX
2004-05-15 00:51
2004.05.30
Где лежит номер лицензии Windows?


3-1084362480
Basaur
2004-05-12 15:48
2004.05.30
технология DataSnap


8-1079985708
Cosmit
2004-03-22 23:01
2004.05.30
Delphi и Flash.





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