A
avbb4cat
Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下,
问题是: QueryInterface这样用对吗?
我查帮助说需要使用_AddRef增加计数,但是还是报错,请问大侠下面的代码到底什么地方出问题了?
运行几次没问题,但是多次运行就会报错! 不明白为什么! 恳请大侠指点!
type
IDelta = interface
['{015F9E5A-37A3-4D98-9366-A561BA287AFC}']
....
end;
IFieldMapInfo = interface(IDelta)
['{5701BC80-149F-4AF1-A861-655030FFFC8D}']
....;
end;
const
IID_IFieldMapInfo: TGUID='{5701BC80-149F-4AF1-A861-655030FFFC8D}';
var
Delta:IDelta;
TmpFieldMapInfo:IFieldMapInfo;
//从Delta继承
begin
Pointer(Delta):=Iother;
if Delta.QueryInterface(IID_IFieldMapInfo, TmpFieldMapInfo) = S_OK then
begin
.....;//这里需要AddRef吗?
TmpFieldMapInfo := nil;
//这儿释放有问题吗?
end;
Pointer(Delta) := nil;
//这个操作会把 Iother 也释放掉吗?
end;
问题是: QueryInterface这样用对吗?
我查帮助说需要使用_AddRef增加计数,但是还是报错,请问大侠下面的代码到底什么地方出问题了?
运行几次没问题,但是多次运行就会报错! 不明白为什么! 恳请大侠指点!
type
IDelta = interface
['{015F9E5A-37A3-4D98-9366-A561BA287AFC}']
....
end;
IFieldMapInfo = interface(IDelta)
['{5701BC80-149F-4AF1-A861-655030FFFC8D}']
....;
end;
const
IID_IFieldMapInfo: TGUID='{5701BC80-149F-4AF1-A861-655030FFFC8D}';
var
Delta:IDelta;
TmpFieldMapInfo:IFieldMapInfo;
//从Delta继承
begin
Pointer(Delta):=Iother;
if Delta.QueryInterface(IID_IFieldMapInfo, TmpFieldMapInfo) = S_OK then
begin
.....;//这里需要AddRef吗?
TmpFieldMapInfo := nil;
//这儿释放有问题吗?
end;
Pointer(Delta) := nil;
//这个操作会把 Iother 也释放掉吗?
end;