Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.036 c
1-1090379603
Dub
2004-07-21 07:13
2004.08.01
слияние двух переменных типа string


1-1089792211
msdn
2004-07-14 12:03
2004.08.01
Копирование файла


4-1087995049
Samael6
2004-06-23 16:50
2004.08.01
Хук на закрытие и свертывание окна


8-1084547525
WH
2004-05-14 19:12
2004.08.01
TCanvas тороза создаёт


14-1089969565
guest
2004-07-16 13:19
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский