Текущий архив: 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