在一个纯unit单元(UnitResource.pas)中写了一个从class和Interface继续下来的类.
  TResource=Class(TObject, IPlugInBuilder)编译时报:
[Error] Undeclared identifier: 'QueryInterface'
[Error] UnitPlugIn.pas(73): Undeclared identifier: '_AddRef'
[Error] UnitPlugIn.pas(73): Undeclared identifier: '_Release'加了
function TResource._AddRef: Integer;
begin
  result := -1;
end;function TResource._Release: Integer;
begin
  result := -1;
end;function TResource.QueryInterface(const IID: TGUID; out Obj): HResult;
const
  E_NOINTERFACE = $80004002;
begin
  if GetInterface(IID, Obj) then
    Result := 0
  else
    Result := -1; {E_NOINTERFACE}
end;
后, 又报下面三个错误,那更搞不懂了:
[Error] UnitResource.pas(73): Declaration of 'QueryInterface' differs from declaration in interface 'IInBuilder'
[Error] UnitResource.pas(73): Declaration of '_AddRef' differs from declaration in interface 'IInBuilder'
[Error] UnitResource.pas(73): Declaration of '_Release' differs from declaration in interface 'IInBuilder'

解决方案 »

  1.   

    [Error] Undeclared identifier: 'QueryInterface'
    [Error] UnitPlugIn.pas(73): Undeclared identifier: '_AddRef'
    [Error] UnitPlugIn.pas(73): Undeclared identifier: '_Release'//////////////错误提示是“未经宣布的”说明你需要发布一下,或者声明一下什么的吧
      

  2.   

    从TInterfacedObject继承就可以了
      

  3.   

    TResource=Class(TObject, IPlugInBuilder)
    改为:
    TResource=Class(TInterfacedObject, IPlugInBuilder)
      

  4.   

    你可以看看TInterfacedObject这个类的实现,因为它已经帮你实现了那几个函数,所以你的类从它继承就可以不用自己实现那几个函数了。当然你也可以自己实现那几个函数,但是注意它们在Interface里面的声明
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;你掉了stdcall所以编译器报错,函数声明不一致