Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.19;
Скачать: CL | DM;

Вниз

из 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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.089 c
1-1160132017
Wolfram
2006-10-06 14:53
2006.11.19
Расширенный TStringGrid


1-1160396740
IMHO
2006-10-09 16:25
2006.11.19
Быстрый поиск в двоичном файле


15-1162559111
ArtemESC
2006-11-03 16:05
2006.11.19
Фильм "Остаться в живых"


15-1162457313
dr Gonzo
2006-11-02 11:48
2006.11.19
Нужен ли софтверной фирме открытый форум?


1-1160114258
DVM
2006-10-06 09:57
2006.11.19
Фреймы самопроизвольно превращаются в формы!