- 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;
TarasB 18.04.2012 22:10 # 0
LightBlack 18.04.2012 22:18 # 0
eshield 16.05.2012 14:52 # 0
Такое обнуление: Pointer(oIntf) := nil безопасное. Можно так же и так NativeInt(oIntf) := 0 обнулить не боясь AV;
TarasB 16.05.2012 19:02 # 0
eshield 16.05.2012 20:10 # +2
TarasB 16.05.2012 21:42 # 0
lucidfoxGovno 18.04.2012 23:18 # +4
купи наши компаненты и станеш програмисстом!
movaxbx 19.04.2012 20:25 # 0
digital-to-analog converter?
lucidfoxGovno 20.04.2012 01:30 # 0
LightBlack 20.04.2012 17:47 # 0
eshield 16.05.2012 14:49 # +1
2. Если в методе ADCreateInterface не происходит никакой инициализации in/out аргументов, то при возникновении в ADCreateInterface исключительной ситуации мусор в переменной oIntf останется (если он там, конечно, был ... шанс 99%, что будет);
3. Если произошло исключение в ADCreateInterface и при выходе из метода ADHasFactory переменная oIntf не nil, то произойдёт попытка освободить интерфейс и, разумеется, приключится AV;
Поэтому, всё сделано правильно, хомячки;