- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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;
Поэтому, всё сделано правильно, хомячки;