Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.28;
Скачать: CL | DM;

Вниз

Работа с 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
14-91810
TiRAN
2003-07-12 14:57
2003.07.28
Как с помощью Delphi послать файл по e-mail?


7-91921
NailMan
2003-05-19 13:30
2003.07.28
Консольное приложение на полный экран


9-91613
Landgraph
2003-02-04 13:32
2003.07.28
Видимость полигона...


7-91926
Senka
2003-05-19 15:00
2003.07.28
Пример проги считывания данных из СОМ- прота, помогите пож.


3-91624
Дмитрий Д.
2003-07-01 08:37
2003.07.28
Как обработать поле где нет данных ? (BDE, dBase)