unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Ole2, UrlMon;type
  TForm1 = class(TForm, IBindStatusCallback)
  private
    { Private declarations }
    function OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult; stdcall;
    function GetPriority(out nPriority): HResult; stdcall;
    function OnLowResource(reserved: DWORD): HResult; stdcall;
    function OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG;
      szStatusText: LPCWSTR): HResult; stdcall;
    function OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult; stdcall;
    function GetBindInfo(out grfBINDF: DWORD; var bindinfo: TBindInfo): HResult; stdcall;
    function OnDataAvailable(grfBSCF: DWORD; dwSize: DWORD; formatetc: PFormatEtc;
      stgmed: PStgMedium): HResult; stdcall;
    function OnObjectAvailable(const iid: TGUID; punk: IUnknown): HResult; stdcall;
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}{ TForm1 }function TForm1.GetBindInfo(out grfBINDF: DWORD;
  var bindinfo: TBindInfo): HResult;
beginend;function TForm1.GetPriority(out nPriority): HResult;
beginend;function TForm1.OnDataAvailable(grfBSCF, dwSize: DWORD;
  formatetc: PFormatEtc; stgmed: PStgMedium): HResult;
beginend;function TForm1.OnLowResource(reserved: DWORD): HResult;
beginend;function TForm1.OnObjectAvailable(const iid: TGUID;
  punk: IInterface): HResult;
beginend;function TForm1.OnProgress(ulProgress, ulProgressMax, ulStatusCode: ULONG;
  szStatusText: LPCWSTR): HResult;
beginend;function TForm1.OnStartBinding(dwReserved: DWORD; pib: IBinding): HResult;
beginend;function TForm1.OnStopBinding(hresult: HResult; szError: LPCWSTR): HResult;
beginend;end.编译时出错:
[Error] Unit1.pas(25): Declaration of 'OnDataAvailable' differs from declaration in interface 'IBindStatusCallback'
[Error] Unit1.pas(25): Declaration of 'OnObjectAvailable' differs from declaration in interface 'IBindStatusCallback'
[Error] Unit1.pas(59): Declaration of 'OnObjectAvailable' differs from previous declaration
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'怎么解决该问题呀?

解决方案 »

  1.   

    对了,我用的是Borland Delphi 7.0,IBindStatusCallback的接口方法是从UrlMon里COPY出来的该不会有笔误,是不是要调整什么参数呢?谢谢了。
      

  2.   

    TForm1的OnDataAvailable方法与IBindStatusCallback中的OnDataAvailable方法定义不一致,你可以比对一下参数及返回值的类型。
      

  3.   

    TForm1中的接口方法,要定义在public中,不能定义在private中,接口是对外的服务,当然所以不能为私有
      

  4.   

    问题原因找到了:PFormatEtc和PStgMedium在ole2和ActiveX两个单元中都有定义,你应该引用ActiveX单元,把uses部分的ole2改成ActiveX即可。
      

  5.   

    谢谢,确实如此,在UrlMon单元内;
    unit UrlMon;{$WEAKPACKAGEUNIT}interfaceuses
      Windows, ActiveX;而Ole2也有PFormatEtc等的定义,问题解决,多谢dctony