Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1162188889
pavel_guzhanov
2006-10-30 09:14
2006.11.19
Нашел книгу Рихтера в отличном качестве, формат CHM


1-1160418934
o_serg
2006-10-09 22:35
2006.11.19
ListView.Items.Item[n].Data присвоить ansistring


2-1162460306
проходил мимо решил заглянуть
2006-11-02 12:38
2006.11.19
Ошибки конвертации


3-1158426208
Fostr
2006-09-16 21:03
2006.11.19
SQL - Update


2-1162375551
md
2006-11-01 13:05
2006.11.19
pen.Style:=psDash;





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский