Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обращение из Delphi к DLL написанной на C++ [D7, WinXP]


Страницы:   1 2 3

smirnoff ©   (2009-07-03 12:02:00) 

Здравствуйте! У меня вопрос по работе с типом puchar. Такая ситуация: имеется dll файл написанный на C++Builder. Из dll экспортируется функция следующим образом

extern "C" bool __declspec( dllexport ) func1(unsigned char *input, unsigned char *output);

В проекте Delphi импортируем эту функцию:

function func1(input: pointer; output: pointer): bool; cdecl;
external 'my.dll' name '_func1';


Работаем с импортированной функцией func1:

procedure TForm1.Button1Click(Sender: TObject);
var
 i :integer;
 s : string;
 a: array[0..30000] of char;
 b: ^uchar;

 a2: array[0..60000] of uchar;
 b2: ^uchar;
begin
StrCopy(a, pchar(Memo1.Text));

b := @a;
b2 := @a2;

func1(b,b2);

for I := 0 to Length(Memo1.Text) do
s := s + chr(a2[i]);
Memo2.Text := s;
end;


Проблемав том, что func1 видит только первый (нулевой) символ массива "a", а необходимо, чтобы весь массив был доступен для dll.

Вот в dll выводится на экран параметр input
ShowMessage((char *)input);

Объясните, пожалуйста, как правильно передать указатель на uchar из Delphi в dll. Заранее огромное спасибо!


Плохиш   (2009-07-03 12:59:00) [41]


> Передается только нулевой символ

Первый символ не #00 ли случайно?


clickmaker   (2009-07-03 12:59:00) [42]

a: array[0..30000] of char;
b: PChar absolute a;

a2: array[0..60000] of uchar;
b2: PChar absolute a2;

это убрать
b := @a;
b2 := @a2;


smirnoff   (2009-07-03 12:42:00) [43]


> func1(PChar(a), PChar(a2));Это что ли надо?


Пробовал, эффект то же, что и прежде. Передается только нулевой символ,  хотелось бы чтобы весь массив был доступен для dll.


Плохиш   (2009-07-03 12:23:00) [44]


> func1(b,b2);

func1(PChar(a), PChar(a2));

Это что ли надо?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо