getcpuid函数不能定义成成员函数,修改如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;type
  TCPUID  = array[1..4] of Longint;
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
tp:Tcpuid;
Form1: TForm1;implementation
{$R *.DFM}
function GetCPUID : TCPUID; assembler; register;
asm
  PUSH    EBX
  PUSH    EDI
  MOV    EDI,EAX
  MOV    EAX,1
  DW      $A20F
  STOSD
  MOV    EAX,EBX
  STOSD
  MOV    EAX,ECX
  STOSD
  MOV    EAX,EDX
  STOSD
  POP    EDI
  POP    EBX
end;procedure TForm1.Button1Click(Sender: TObject);
begin
tp:=getcpuid;
memo1.Lines.Add(floattostr(tp[1]));
memo1.Lines.Add(floattostr(tp[2]));
memo1.Lines.Add(floattostr(tp[3]));
memo1.Lines.Add(floattostr(tp[4]));
end;end.

解决方案 »

  1.   

    另,floattostr用的怪怪的,前面定义为Longint数组,最好用IntToStr转换,当然,你这样做,也没什么大问题,只是可能存在转换精度的细微差别
      

  2.   

    to pipai:
    问题已解决了!请问为什么不能定义成成员函数啊,能简单说明一下吗?
    明天我就给分了。
      

  3.   

    以上是为你的程序需要作的修改,实际上,用成员函数也可,但成员函数由于传递了一个隐含参数:对象指针,故参数传递及返回值的寄存器编译约定与普通函数不同,具体修改如下,可通过:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TCPUID  = array[1..4] of Longint;
      TForm1 = class(TForm)
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        function GetCPUID : TCPUID;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
    tp:Tcpuid;
    Form1: TForm1;implementation
    {$R *.DFM}
    function TForm1.GetCPUID : TCPUID; assembler; register;
    asm
      PUSH    EAX
      PUSH    EBX
      PUSH    ECX
      PUSH    EDI
      MOV    EDI,EDX
      MOV    EAX,1
      DW      $A20F
      STOSD
      MOV    EAX,EBX
      STOSD
      MOV    EAX,ECX
      STOSD
      MOV    EAX,EDX
      STOSD
      POP    EDI
      POP    ECX
      POP    EBX
      POP    EAX
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    tp:=getcpuid;
    memo1.Lines.Add(floattostr(tp[1]));
    memo1.Lines.Add(floattostr(tp[2]));
    memo1.Lines.Add(floattostr(tp[3]));
    memo1.Lines.Add(floattostr(tp[4]));
    end;end.