Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
3-91624
Дмитрий Д.
2003-07-01 08:37
2003.07.28
Как обработать поле где нет данных ? (BDE, dBase)


14-91851
acsoft
2003-07-11 06:48
2003.07.28
Слышал, что при помощи UPX можно еще и зашифровать exe. Как это с


6-91805
SergeyI
2003-05-21 09:04
2003.07.28
Написание


1-91713
VID
2003-07-14 23:39
2003.07.28
Дельфи 5 или код ?


14-91897
neuro
2003-07-11 20:07
2003.07.28
=)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский