Главная страница
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.061 c
14-1089799403
Rostislav Rotaru
2004-07-14 14:03
2004.08.01
А какая разница на чем писать программы?


3-1089283276
Ani
2004-07-08 14:41
2004.08.01
Как отабразить данные в Query после того я ввожу их в Table?


3-1089282540
3APA3A
2004-07-08 14:29
2004.08.01
COMMIT в ХП


3-1089277437
Koala
2004-07-08 13:03
2004.08.01
Нужна консультация специалиста


1-1090426260
ko
2004-07-21 20:11
2004.08.01
TSaveDialog