Форум: "Основная";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
ВнизРабота с Dll Найти похожие ветки
← →
Salvator (2003-07-15 09:53) [0]Народ, возможно ли передать в функцию написанную в Dll параметр типа string? У меня почему то не получилось, может нужно дописать какие-нибудь модули? Так же пробовал путем перевода в PChar, он передается только почему-то обратно преобразовывается неверно, в чем проблема?
← →
Skier (2003-07-15 09:55) [1]Не надо использовать string без надобности.
О string знает только Delphi и C++ Builder
← →
Salvator (2003-07-15 10:01) [2]
> Не надо использовать string без надобности.
Тогда какой тип использовать, что бы он нормально передался в Dll, а потом обратно?
← →
Skier (2003-07-15 10:03) [3]>Salvator © (15.07.03 10:01)
PChar
← →
Salvator (2003-07-15 10:09) [4]Пишу код в Dll:
Function Stroka(str:PChar):PChar;stdcall;export;
begin
Stroka:=PChar(string(str)+"!");
end;
В программе:
Edit2.Text:=String(Stroka(PChar(Edit1.Text)));
Просто и нагло выбивает программу. В чем ошибка?
← →
Skier (2003-07-15 10:13) [5]>Salvator © (15.07.03 10:09)
Начнём с такого вопроса :
Stroka:=PChar(string(str)+"!"); - > преобразование PChar в String, а затем String снова в PChar
Какой ты видишь смысл в подобном преобразовании ?
Кроме того хорошо бы показать как
объявлена Stroka в приложении...
И ещё : Какая конечная цель у ф-ции Strok ?
← →
Salvator (2003-07-15 10:25) [6]Ну насколько я помню PChar, это указатель и конкатенацию он не делает. Поэтому преобразую к string.
В приложении функция объявлена так:
Function Stroka(str:PChar):PChar;far;external "MyDll";
У данной функции пока смысла нет, просто смотрю как передавать параметр. Потому что если разбираться с тем кодом какой мне нужен, то он довольно большой и это не совсем удобно.
← →
Skier (2003-07-15 10:27) [7]Это главный косяк :
Function Stroka(str:PChar):PChar; far;external "MyDll";
Пиши так :
Function Stroka(str:PChar):PChar; stdcall;external "MyDll";
← →
Salvator (2003-07-15 10:30) [8]Хорошо, а какая разница между ними? Far показывает что это вызов удаленной процедуры(функции), а что такое StdCall?
← →
Skier (2003-07-15 10:35) [9]Уважаемый Дмитрий, если ты не будешь читать Help (хотя бы) то
свои проблемы с места ты врядли сдвинешь, а по сему
нажми F1 и набери Stdcall, "дверь и откроется", а бомбить форум
такими вопросами не очень культурно...
← →
Юрий Зотов (2003-07-15 11:29) [10]Память под результат не выделена?
← →
Юрий Федоров (2003-07-15 11:32) [11]>>Salvator © (15.07.03 09:53)
если библиотечная функция возвращает строку (или PChar), нужно либо выделить память на стороне приложения, либо использовать ShareMem.
А ты тут мало того, что не выделил память под результат, ты ее скорее всего и освобождать не собирался
← →
Cr@zy-EyE (2003-07-15 13:25) [12]Чтобы передовать String, включи ShareMem в библу и прогу, обязательно в начале списка uses. Об этом в в исходнике созданной библиотеки написан боооооооольшой комментарий.
← →
Salvator (2003-07-15 13:47) [13]
> Cr@zy-EyE
Неспорю, сказано, но только после вставки все равно не фунциклирует.
← →
Юрий Зотов (2003-07-15 13:51) [14]> Salvator © (15.07.03 13:47)
Уточните - куда именно вставлен ShareMem?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c