Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Вниз

Работа с переменной типа PChar.   Найти похожие ветки 

 
S@shka   (2004-03-01 15:14) [0]

procedure Test (P : PChar);
begin
P := "test";
end;
procedure Alfa;
var
P : PChar;
begin
GetMem (P,5);
Test (P);
ShowMessage (P);
FreeMem (P);
end;
Почему при вызове ShowMessage P - не равен "test"


 
Тимохов   (2004-03-01 15:15) [1]

var в параметрах


 
S@shka   (2004-03-01 15:36) [2]

Клева
но ведь PChar - эта поинтер то CHAR.
Как делать если мне необходимо вернуть переменную данного типа
из DLL например - тоже через var писать ее


 
Тимохов   (2004-01-23 13:11) [3]

Сам на память не помню, спроси лучше отдельным топиком "Как из DLL вернуть PCHAr" - вероятность получения ответа выше.


 
PVOzerski   (2004-01-23 13:13) [4]

>но ведь PChar - эта поинтер то CHAR.
на массив CHAR"ов.
Если надо вернуть, то либо, действительно var, либо (то же самое, но иным синтаксисом) не var, но указатель на pChar, либо вернуть как результат функции. Важный момент: если менеджеры динамической памяти у DLL и вызывающего ее приложения разные, можно "крупно нарваться", если выделять память под блок в DLL, а потом освобождать ее или изменять размеры в EXE.


 
S@shka   (2004-01-23 13:30) [5]

По поводу Dll было написано,
что для дого что бы не тащить за собой модуль ShareMem
необходимо строки передавать через PChar.
Вот и вопрос как вернуть через PChar.
Я пока делаю через
( ... var P : PChar);
из C вызываю через указатель на PChar все работает - но правильно ли этол????


 
Reindeer Moss Eater   (2004-01-23 13:36) [6]

Если хочешь никогда не иметь проблем, то лучший (и стандартный для Windows) вариант такой

function MyFunc(... AData : Pointer; var ADataSize : integer) : boolean;

Вызов:
var
p : PChar;
Size:integer;
begin
if MyFunc(... ,nil,Size) then
begin
p:=StrAlloc(Size);
MyFunc(...,p,Size);
end


 
WebErr   (2004-03-01 17:50) [7]

Гы-гы! :))))

const
S: String = "test";

...

procedure Test(P: PChar);
var
I, N: Integer;
begin
N := Length(S);
for I := 0 to N-1 do (P + I)^ := S[I + 1];
(P + N)^ := #0;
end;

function PCharToStr(P: PChar): String;
begin
Result := "";
while P^ <> #0 do
begin
Result := Result + P^;
P := P + 1;
end;
end;

procedure Alfa;
var
P: PChar;
begin
GetMem(P,5);
Test(P);
ShowMessage(PCharToStr(P));
FreeMem(P);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Alfa;
end;

Это ж надо! У String"a (короткого) первый байт всегда длина строки!
Не знаю! ... У меня с первого раза получилось! :))))


 
WebErr   (2004-03-01 17:58) [8]

И вообще, я тоже хочу синюю подсветку (или под Аньку, или под Юльку) своего никнэйма!!!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.012 c
14-43809
Malkolinge
2004-02-23 12:24
2004.03.14
Profiler для Делфи


1-43556
luzhansky
2004-02-27 17:52
2004.03.14
QReport Delphi 5


4-43951
Delphi5.01
2004-01-07 00:10
2004.03.14
Problem with CreatePolygonRgn


14-43874
ИМХО
2004-02-19 05:07
2004.03.14
---|Ветка была без названия|---


1-43617
fatal
2004-03-02 15:11
2004.03.14
Вложить файл.





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