- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
function ADHasFactory(const AIID: TGUID): Boolean;
var
oIntf: IUnknown;
begin
try
ADCreateInterface(AIID, oIntf, False);
Result := oIntf <> nil;
except
Pointer(oIntf) := nil;
Result := False;
end;
end;
Такое обнуление: Pointer(oIntf) := nil безопасное. Можно так же и так NativeInt(oIntf) := 0 обнулить не боясь AV;
купи наши компаненты и станеш програмисстом!
digital-to-analog converter?
2. Если в методе ADCreateInterface не происходит никакой инициализации in/out аргументов, то при возникновении в ADCreateInterface исключительной ситуации мусор в переменной oIntf останется (если он там, конечно, был ... шанс 99%, что будет);
3. Если произошло исключение в ADCreateInterface и при выходе из метода ADHasFactory переменная oIntf не nil, то произойдёт попытка освободить интерфейс и, разумеется, приключится AV;
Поэтому, всё сделано правильно, хомячки;