const
S_NONE = $00000002;
type
TSendResult = (
srNoExceptionInfo = S_NONE, // = $00000002
srUnsupportedSender = E_NOINTERFACE // = $80004002
);
procedure TForm1.Button1Click(Sender: TObject);
var
SR: TSendResult;
begin
SR := srUnsupportedSender;
Assert(Ord(SR) = Ord(E_NOINTERFACE));
end;
Правильный ответ: НЕТ. SR будет равен srNoExceptionInfo.Крепче всего спит тот, кто не подписан на QC.
P.S. По поводу задачки №17 - там ещё ответы время от времени сыплются, поэтому пока ничего не публикую, самому интересно читать...
> По поводу задачки №17 - там ещё ответы время от времени сыплются
ОтветитьУдалитьWTF? За последний месяц там отписалась всего пара неадекватов про C# да цикл с i: word. Дело конечно ваше, можете хоть через год ответы выкладывать, только некрасиво получается, когда озвучивается срок в две недели, а потом тишина на два месяца...
Никакого ужаса: значение E_NOINTERFACE не влазит в тип Integer ($7FFFFFFF) вот оно и глючит. У меня при присвоении srUnsupportedSender значения $80000000 и попытке записать его в SR, оказывается [b](out of bound) 0[/b].
ОтветитьУдалить> значения $80000000
ОтветитьУдалитьТАм ещё 4-ка в середине - ей-то куда деваться?
+ для XE2: компилятор для типа подобного TSendResult не создает RTTI :-(
ОтветитьУдалитьА можно описать что д2007 генерит? Почему такое происходит? А то не у всех же д2007 стоит, а знать такую особенность не помешает.
ОтветитьУдалитьD2007 и ниже считает SizeOf(TSendResult) = 1 со всеми вытекающими. D2009+ - полёт нормальный.
ОтветитьУдалить