Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
Внизиз dll очень длинную строку без ShareMem Найти похожие ветки
← →
guav © (2006-10-24 19:03) [40]
> [24] Пусик © (16.10.06 11:54)
AFAIR, WideString из одной кучи будут и по умолчанию.
← →
Desdechado © (2006-10-24 20:31) [41][0]
> exe не на делфях написана
меня что-то это смущает...
← →
Пусик © (2006-10-24 21:55) [42]
> Так, а если я указываю var string, то что передаётся в dll?
> Указатель на область памяти?
Передается указатель на String.
В DLL(без общего менеджера памяти) ты можешь читать и изменять область памяти, на которую указывает @Str[1] длиной Length(Str).
← →
_Ламер_ (2006-10-25 20:43) [43]Прошу прощения, но что-то я не догоняю. Что произойдёт, если я в dll этой var string присвою значение переменной, определённой в dll тоже как string. примерно как-то так
var
Str1 : string;
.....
procedure solve (var Str2 : string); stdcall;
begin
Str2 := Str1;
....
end;
Что я получу в Str2 - свой старый указатель или новый на строку Str1?
← →
Ketmar © (2006-10-25 20:59) [44]>[42] Пусик(c) 24-Oct-2006, 21:55
>изменять
да? ух, ты. век живи, век учись... а я наивно считал, что у AnsiString ещё reference counter есть. который приделали вовсе не зря.
>[43] _Ламер_ 25-Oct-2006, 20:43
>Что я получу в Str2 - свой старый указатель или новый на
>строку Str1?
ага. и AV потом. рассказать, где можно метлу купить?
← →
_Ламер_ (2006-10-30 20:02) [45]А можно по WideString вопрос? Можно, правда?
var
edLogin, edPassword : WideString;
......
procedure PostInfo (aLogin, aPassword : PWideChar; var LLength, PLength : byte); stdcall;
begin
if (aLogin = nil) or (aPassword = nil) then exit;
LLength := Length (edLogin);
Move (edLogin[1], aLogin[0], LLength);
PLength := Length (edPassword);
Move (edPassword[1], aPassword[0], PLength);
MessageBoxW (0, PWideChar (edLogin), PWideChar (edPassword), MB_OK);
MessageBoxW (0, aLogin, aPassword, MB_OK);
end;
Первый MessageBox покзывает строки правильно, второй - только их половину. Где, что не так?
← →
Leonid Troyanovsky © (2006-10-30 20:19) [46]
> _Ламер_ (30.10.06 20:02) [45]
> А можно по WideString вопрос? Можно, правда?
Это смотря чего и сколько прочитано.
Хотя, в любом случае, похоже, усваивается плохо.
Поэтому, по одному вопросу, плиз.
--
Regards, LVT.
← →
_Ламер_ (2006-10-30 22:56) [47]Почитал справку. Оказывается Length для Unicode возвращает половину длины. Интересно, почему? И почему для 1234 он возвращает 4, но копирует всего 2 символа?
← →
Leonid Troyanovsky © (2006-10-30 23:14) [48]
> _Ламер_ (30.10.06 22:56) [47]
> половину длины. Интересно, почему? И почему для 1234 он
> возвращает 4, но копирует всего 2 символа?
А, ведь, интересно читать справку?
Но, нам, пока, не очевидна связь между edLogin & aLogin.
--
Regards, LVT.
← →
DiamondShark © (2006-10-31 01:20) [49]
> А что, в dll нельзя писать
...
> result := pChar (MyClass.AsString);
не только в длл. нигде нельзя.
время валидности указателя, возвращаемого операцией PChar(<string expression>) -- область видимости <string expression>.
в приведённом случае -- это один оператор.
← →
_Ламер_ (2006-10-31 11:49) [50]Память для aLogin выделяет exe и передаёт указатель в dll.
← →
Leonid Troyanovsky © (2006-10-31 14:14) [51]
> _Ламер_ (30.10.06 22:56) [47]
> Почитал справку. Оказывается Length для Unicode возвращает
> половину длины. Интересно, почему?
Во-первых, Length возвращает число символов.
Во-вторых, юникодный символ - это 2 байта.
> И почему для 1234 он возвращает 4, но копирует всего 2 символа?
Кто "он"? Кто возвращает и кто копирует?
Показывай.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2006-10-31 14:20) [52]
> _Ламер_ (31.10.06 11:49) [50]
> Память для aLogin выделяет exe и передаёт указатель в dll.
А откуда взялось edLogin?
Кста, тебе ж разрешили в dll возвращать (передавать) WideString.
Т.е., function y (x: WideString): WideString;
Только, stdcall тебе зачем?
--
Regards, LVT.
← →
_Ламер_ (2006-11-01 10:51) [53]В edLogin моя строка находится.
Ну в общем всем спасибо.
Всех целую.
Будут вопросы - обязательно загляну.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.049 c