AlekXL
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Ну, коллеги - хоть кто то может мне сказать, почему у классов из System.Generics.Collections (например, TObjectList <T>) все методы - не виртуальные?! То есть я не могу их переопределить, чтобы добавить нужное мне поведение! Ну вот какая логика-то в этом была, когда это делали? | аллах с ними. Есть куда более мощные библиотеки контейнеров. Как есть и для шарпа C5 либа. у меня новая заморочка Код: readSuccess:=ReadFileEx(Handle,Addr(Buffer),count,Addr(request.Overlapped),@FileIOCompletionRoutine ); //readFileEx result is quite meaningless err:=GetLastError(); //if readSuccess==true, then operation completed synchronously Inc(tries); readSuccess:= (err=ERROR_SUCCESS) or (err=ERROR_IO_PENDING) or (err=ERROR_IO_INCOMPLETE); | файл читается маленький, 17 килобайт, и из-за это в count усекался по размеру файла. Я получал err=87, что-то вроде "Параметр задан неверно". Захардкодил места count -1024 - получил ERROR_SUCCESS закоментировал усечение count ( так чтоб он равнялся всему размеру буфера, 64KB -ERROR_SUCCESS) То есть требуется, чтобы nNumberOfBytesToRead был кратным чему-то? Нигде в документации не встречал. ------ и еще одна есть два интерфейса Код: IovRequestWin=interface(IovRequest) ['{19EB993E-1D96-4F0C-9BAB-743BE38CF708}'] function getOverlapped():TOverlapped; property Overlapped:TOverlapped read getOverlapped; end; | и Код: IovRequest=interface ['{1B282163-8DB7-450C-9C31-2DD75EA27A96}'] function IsPending():Boolean; function GetResult():TovResult; function getOnRequestFinished():TRequestCallback; procedure setOnRequestFinished(handler:TRequestCallback); function Wait(timeOut:Cardinal=5000):TWaitResult; function getBytesDone():integer; function EnsureDone():TovResult; end; | и класс Код: TRequest = class(TMyInterfacedObject,IovRequestWin) | мне нужно вернуть TRequest в качестве IovRequest. Присваивание не работает, внезапно. Код Код: Assert( request.GetInterface(IovRequest,Result)); | выдает EAssertion только грязный Код: Assert( request.GetInterface(IovRequestWin,Result)); | срабатывает, но не уверен, что все там корректно... Как это сделать элегантно? | Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 20:20 13-06-2013 | Исправлено: AlekXL, 20:21 13-06-2013 |
|