Тема: pointer
Показать сообщение отдельно
  #14  
Старый 03.08.2010, 23:36
mtp mtp вне форума
Прохожий
 
Регистрация: 03.08.2010
Адрес: Россия
Сообщения: 2
Репутация: 10
Вопрос Указатели

Доброго времени суток, товарищи. Есть процедура получения размера ресурса и указателя на данные ресурса. Но перед тем как выдать указатель из процедуры, данные по его адресу нужно обратотать функцией "Function Decode(DInPut: Byte): Byte;" тип передаваемого и получаемого пареметров функции изменить не возможно. Тип данных по адресу "ResPtr" не известен.
Код:
...

Type
 TByteArray = Array Of Byte;

Procedure LoadDataFromRes(TheData: String; Var DataSize: LongWord; Var DataPtr: Pointer);
 Var
  ResHandle : THandle;
  MemHandle : THandle;
  ResPtr    : Pointer;
  Buffer    : TByteArray;
  Count     : LongWord;
 Begin
  DataPtr  := NIL;
  DataSize := 0;
  ResHandle := FindResource(hInstance, PChar(TheData), 'DATA');
  MemHandle := LoadResource(hInstance, ResHandle);
  DataSize    := SizeOfResource(hInstance, ResHandle);
  ResPtr    := LockResource(MemHandle);
  IF (ResPtr = NIL) OR (DataSize = 0) Then Exit;
  SetLength(Buffer, DataSize);
  Move(ResPtr, Buffer, DataSize);
  For Count := 0 To DataSize-1 Do
   Begin
    Buffer[Count] := Decode(Buffer[Сount]);
   End;
  Move(Buffer, DataPtr, DataSize);
  FreeResource(ResHandle);
 End;
Выдает runtime error 216. Что я делаю не так!?
И ещё один вопрос, как из области памяти получить/присвоить значение определенного байта, имея лишь указатель на область и зная ее размер, без использвания массивов?