Форум: "Потрепаться";
Текущий архив: 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.48 MB
Время: 0.032 c