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

Вниз

два способа чтение из памяти   Найти похожие ветки 

 
koha ©   (2007-02-22 19:19) [0]

Методом 1 копируется ресурс без проблем, а вторым методом нехочет?  
Посути почти одно и тоже.

Var
 RSRC : THandle;
 HRSRC: THandle;


1)
RSRC := FindResource(HInstance,"lst",RT_RCDATA);
SizeRes := SizeOfResource(HInstance, RSRC);
HRSRC:=LoadResource(HInstance,RSRC);
LockResource(HRSRC);
Move(Pointer(HRSRC)^,Buff,SizeRes);
mm.Lines.Add(StrPas(Buff));


2)
RSRC := FindResource(HInstance,"lst",RT_RCDATA);
SizeRes := SizeOfResource(HInstance, RSRC);
Move(Pointer(HRSRC)^,Buff,SizeRes);
mm.Lines.Add(StrPas(Buff));


 
koha ©   (2007-02-22 19:23) [1]

Сорри, второй метод был с опечаткой -> исправил.

2)
RSRC := FindResource(HInstance,"lst",RT_RCDATA);
SizeRes := SizeOfResource(HInstance, RSRC);
Move(Pointer(RSRC)^,Buff,SizeRes);
mm.Lines.Add(StrPas(Buff));


 
Джо ©   (2007-02-22 19:30) [2]

(1) и (2) — совсем НЕ одно и то же.


 
Джо ©   (2007-02-22 19:31) [3]

FindResource НЕ возвращает указатель на область памяти.


 
koha ©   (2007-02-22 19:35) [4]


> FindResource НЕ возвращает указатель на область памяти.


- а что он вернул? и еще чтобы вторым методом считать нужно ли выделять память?


 
koha ©   (2007-02-22 19:40) [5]

я бы конечно разобрал как работает LoadResource, но она внешняя из kernel32 а не из unita.


 
Джо ©   (2007-02-22 19:42) [6]

> [5] koha ©   (22.02.07 19:40)
> я бы конечно разобрал как работает LoadResource, но она
> внешняя из kernel32 а не из unita.

Читай справку или MSDN, что ж вслепую тыкаться-то?


 
Джо ©   (2007-02-22 19:43) [7]

FindResource Function
If the function succeeds, the return value is a handle to the specified resource"s information block. To obtain a handle to the resource, pass this handle to the LoadResource function.

LoadResource Function
If the function succeeds, the return value is a handle to the data associated with the resource.


 
koha ©   (2007-02-22 19:49) [8]

> Читай справку или MSDN

- это то понятно, но реальный код по винтикам разобрать гораздо приятней :-)


 
Джо ©   (2007-02-22 19:50) [9]

> [8] koha ©   (22.02.07 19:49)
> - это то понятно

Тогда непонятно, откуда мог взяться код (2)
:-)


 
koha ©   (2007-02-22 20:05) [10]

> Тогда непонятно, откуда мог взяться код (2)

так эксперемент.

Разбирал код класса TResourceStream, нашел процедуру инициализации посмотрел другие TStream пришел к мнению, что они сперва при инициализации копируют нужный кусок памяти и устанавливают на  него глобальный указатель а за тем уже с ним работают. Вот идея радилась, а что если сразу без копирования в глобальную память скопировать сразу в свой буффер - пока не выходит.


 
Джо ©   (2007-02-22 20:16) [11]

> [10] koha ©   (22.02.07 20:05)
пока не выходит.

И что, текст из [7] ни на какие раздумия не навел? :)


 
koha ©   (2007-02-22 20:22) [12]


> И что, текст из [7] ни на какие раздумия не навел? :)


- да навел, признаюсь тупил...



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

Текущий архив: 2007.03.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.059 c
15-1171808273
Зм1й
2007-02-18 17:17
2007.03.18
Древовидный стиль кода


1-1169504829
Дмитрий Белькевич
2007-01-23 01:27
2007.03.18
Насколько верен следующий код завершения программы:


15-1172230442
Cyrax
2007-02-23 14:34
2007.03.18
Настройка размещения элементов панели задач


3-1167036805
tytus
2006-12-25 11:53
2007.03.18
10g Express edition & DOA 4.0.7 - проблема с коннектом.


2-1172098776
Allexandr
2007-02-22 01:59
2007.03.18
ArrangeIcons