Главная страница
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.021 c
14-1084338929
Думкин
2004-05-12 09:15
2004.05.30
С днем рождения! 12 мая


3-1083104408
Chechen
2004-04-28 02:20
2004.05.30
SQL запрос


1-1084977080
SMART_n
2004-05-19 18:31
2004.05.30
Консольное приложение


3-1084370851
юрок
2004-05-12 18:07
2004.05.30
ДБ Грид


4-1082023475
esVer
2004-04-15 14:04
2004.05.30
выделенный текст в чужом окне