Главная страница
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.48 MB
Время: 0.053 c
1-1084681278
tamroF
2004-05-16 08:21
2004.05.30
__________опять DLL


1-1084591138
IrBisoff
2004-05-15 07:18
2004.05.30
Выравнивание по ширине


14-1084254602
Vlad Oshin
2004-05-11 09:50
2004.05.30
по одной и той же ссылке хожу на разные страницы. Почему?


11-1054378257
-=mixir=-
2003-05-31 14:50
2004.05.30
Как пользоваться KOLPNG


7-1083218538
Aplay
2004-04-29 10:02
2004.05.30
Из одного типа в друго