procedure THiAsmClass.doGet;
var
S: string;
AFile: THandle;
AInfo: Pointer;
ABuffer: Pointer;
begin
AFile := OpenFileMapping(FILE_MAP_READ, True, AIMPRemoteAccessClass);
AInfo := MapViewOfFile(AFile, FILE_MAP_READ, 0, 0, AIMPRemoteAccessMapFileSize);
// AInfo указывает на общую память размером в AIMPRemoteAccessMapFileSize
// Пропускаем структуру TAIMPRemoteFileInfo в начале буфера.
// После неё лежит имя файла в Юникоде (WideString) с завершающим 0
ABuffer := Pointer(NativeUInt(AInfo) + SizeOf(TAIMPRemoteFileInfo));
// Приводим простой указатель к указателю на последовательность WideChar
// символов, оканчивающуюся 0 - PWideChar.
// Присвоение PWideChar строке S (AnsiString) приводит к:
// - чтению WideString по указателю до ближайшего 0
// - преобразованию WideString в AnsiString
S := PWideChar(ABuffer);
// Выдаём прочитанную строку
_hi_OnEvent(onOut, S);
// Убираем после себя
UnmapViewOfFile(AInfo);
CloseHandle(AFile);
end;
Ответов: 4628
Рейтинг: 749
|
|||
На, держи:
|
|||
карма: 26 |
|