Главная страница
    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.54 MB
Время: 0.045 c
15-1162462150
MsGuns
2006-11-02 13:09
2006.11.19
Приобретение лецензии на Delphi 7


2-1162203378
Access
2006-10-30 13:16
2006.11.19
Acces, ADO - как получить структуру таблицы?


3-1158822752
ujhtw
2006-09-21 11:12
2006.11.19
GUID из БД


6-1151283337
Junior
2006-06-26 04:55
2006.11.19
Bluetooth


6-1148946937
nikitian
2006-05-30 03:55
2006.11.19
Проблема с кодировкой в indySMTP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский