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

Вниз

Чё-то я туплю...   Найти похожие ветки 

 
Knight ©   (2004-07-14 00:49) [0]

Как послать в функцию из DLL PChar и получить назад результат в PChar... Посылаю в неё строку в PChar, а возвращает она мусор...
если переношу функцию в саму прогу, то всё нормально, если присваиваю результату функции в DLL строку, тоже нормально...

function CheckSend(Path:PChar): PChar; stdcall;
begin
// Что тут надо написать?
end;


 
Knight ©   (2004-07-14 00:55) [1]

В смысле, что надо написать, в этой заготовке, урезанной до беспредела, чтобы отправленное значение вернулось результатом, а не мусором?


 
DiamondShark ©   (2004-07-14 00:57) [2]

Лучше делать так:

procedure Zzz(InStr: PChar; OutStr: PChar; MaxLen: integer): stdcall;
begin
 ...
end;

Внутри функции считать, что под OutStr вызывающая сторона распределила память.


 
Rouse_ ©   (2004-07-14 00:57) [3]

А что пишешь? :)


 
Rouse_ ©   (2004-07-14 01:02) [4]

> [2] DiamondShark ©   (14.07.04 00:57)
Лучше так не делать....
Зачем лишнее кушать? :)


 
Knight ©   (2004-07-14 01:03) [5]

У меня данные в Длл уже мусором приходят...


> [3] Rouse_ ©   (14.07.04 00:57)
> А что пишешь? :)

Да хотел кое-какие функции в dll-ку засандалить, но наверно уже спать пора %)


 
Rouse_ ©   (2004-07-14 01:07) [6]

> > А что пишешь? :) (имелся ввиду код)
> [5] Knight ©   (14.07.04 01:03)
> У меня данные в Длл уже мусором приходят...

Это и хотел узнать...


 
Knight ©   (2004-07-14 01:21) [7]

И так вызывал...
Str:=StrPas(CheckSend("Hello!!!"));

и с переменными и никак не работает...

Но стоит только перенести функцию в основную прогу, она даже так

function CheckSend(Path:PChar): PChar; stdcall;
begin
 Result:=Path;
end;

начинает работать... где теряется Path? Такое ощущение, что разные адресные простанства...


 
Knight ©   (2004-07-14 01:34) [8]

Delphi 5...


 
АлексейК   (2004-07-14 05:50) [9]

pChar всего лишь указатель, а где выделение памяти для строки на которую он будет ссылаться?


 
Knight ©   (2004-07-14 08:06) [10]

"Hello!!!" - это разве не выделение памяти? И через переменные пробовал... не доходят... :(


 
Knight ©   (2004-07-14 08:11) [11]

Если функция в основное программе, то работает любой вариант, который пробовал... вся заморочка в работе с DLL... в чём тут дело?


 
Knight ©   (2004-07-14 08:38) [12]

Из функции приходит всё... а в неё ничего передать не... ведь не должно так быть? При этом никаких сбоев по-памяти не наблюдаеся...

Пробовал создавать переменную

var P:PChar;
...
P:=StrNew("Hello!!!");
Str:=StrPas(CheckSend(P));
...


Не идёт... :(


 
АлексейК   (2004-07-14 08:45) [13]

Сначало подумал, что
Str:=StrPas(CheckSend("Hello!!!"));в DLL

Попробовал у себя, все работает нормально. Может дело в остальном коде, где описана str и где берется из нее значение. Попробуй
ShowMessage(StrPas(CheckSend("Hello!!!")));
Должно пройти нормально.


 
Knight ©   (2004-07-14 09:03) [14]

У меня ShowMessage в DLL...
Мусор...

Может настройки какие?
Напиши как у тебя...


 
Digitman ©   (2004-07-14 09:17) [15]


> Knight ©   (14.07.04 09:03) [14]
> Мусор...


поиски причин мусора должны начинаться с проверки соответствия соглашений о вызовах в вызывающем и вызываемом коде

если stdcall, значит stdcall должен фигурировать и там и там


 
Knight ©   (2004-07-14 09:45) [16]

>> Digitman ©   (14.07.04 09:17) [15]
Я ж говорю, что туплю...
Спасибо. Всё заработало :)


 
Knight ©   (2004-07-14 11:27) [17]

Заодно... может кто знает как загнать в Dll не только Bitmap, Icon, Cursor, а и другие файлы... gif, txt, css и т.п.


 
Anatoly Podgoretsky ©   (2004-07-14 11:39) [18]

Через .rc файл


 
Knight ©   (2004-07-14 14:12) [19]

>> Anatoly Podgoretsky ©   (14.07.04 11:39) [18]
> Через .rc файл
Это  понял... у тебя случайно описания его снтаксиса не завалялось? А то у меня всё какие-то обрывочные моменты... :)


 
Knight ©   (2004-07-14 21:18) [20]

Всё... протормозился... и сделал всё, что требевалось :)
Наверно побочный эффект от резкого выхода из медитации... %)

Всем спасибо...



Страницы: 1 вся ветка

Текущий архив: 2004.08.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
1-1089936646
AlexR
2004-07-16 04:10
2004.08.01
Как отследить мессадж WM_KeyDown при редактировании Edita


1-1090096862
Журавлёв Антон
2004-07-18 00:41
2004.08.01
Здраствуйте! У меня проблема с кодировками


4-1087542911
alexdbases
2004-06-18 11:15
2004.08.01
Появление нового процесса в системе.


11-1077965228
марсианин
2004-02-28 13:47
2004.08.01
аналог TWinControl в KOL


14-1089692960
Def
2004-07-13 08:29
2004.08.01
Память и сворачивание приложения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский