Главная страница
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.51 MB
Время: 0.048 c
6-1084811642
MaxcM
2004-05-17 20:34
2004.08.01
ICS HttpServer + POST


1-1090074536
Комбинатор
2004-07-17 18:28
2004.08.01
как избавиться от символа нуля вконце строки?


3-1088762771
serg128
2004-07-02 14:06
2004.08.01
Как получить перечень параметров из запроса на PL SQL?


14-1089700791
TransparentGhost
2004-07-13 10:39
2004.08.01
IRC канал умер?


14-1089777990
Dmitriy O.
2004-07-14 08:06
2004.08.01
Моя персональная ветка