Вверх ↑
Ответов: 4628
Рейтинг: 749
#1: 2018-05-30 12:27:14 ЛС | профиль | цитата
На, держи:

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;
карма: 26

0