在论坛上找到以下代码:FUNCTION TForm1.GetCPUID : TCPUID; assembler; register;
asm
  PUSH    EBX         {Save affected register}
  PUSH    EDI
  MOV     EDI,EAX     {@Resukt}
  MOV     EAX,1
  DW      $A20F       {CPUID Command}
  STOSD               {CPUID[1]}
  MOV     EAX,EBX
  STOSD               {CPUID[2]}
  MOV     EAX,ECX
  STOSD               {CPUID[3]}
  MOV     EAX,EDX
  STOSD               {CPUID[4]}
  POP     EDI      {Restore registers}
  POP     EBX
END;function TForm1.GetCPUIDStr: string;
var
  CPUID:TCPUID;
begin
  CPUID:=GetCPUID;
  Result:=IntToHex(CPUID[1],8)+IntToHex(CPUID[2],8)+IntToHex(CPUID[3],8)+IntToHex(CPUID[4],8);
end
Edit1.Text := GetCPUIDStr;总是报错: 未定义TCPUID加入
type
  TCPUID = array[1..4] of Longint;还是不能编译成功!
以上到底有什么错的地方?
type
  TCPUID = array[1..4] of Longint;
应该放在哪里?

解决方案 »

  1.   

    implementation{$R *.dfm}
    type
      TCPUID = array[1..4] of Longint;function GetCPUID: TCPUID; assembler; register;
    asm
      PUSH    EBX         {Save affected register}
      PUSH    EDI
      MOV     EDI,EAX     {@Resukt}
      MOV     EAX,1
      DW      $A20F       {CPUID Command}
      STOSD               {CPUID[1]}
      MOV     EAX,EBX
      STOSD               {CPUID[2]}
      MOV     EAX,ECX
      STOSD               {CPUID[3]}
      MOV     EAX,EDX
      STOSD               {CPUID[4]}
      POP     EDI      {Restore registers}
      POP     EBX
    end;function GetCPUIDStr: string;
    var
      CPUID: TCPUID;
    begin
      CPUID := GetCPUID;
      Result := IntToHex(CPUID[1], 8) +
                IntToHex(CPUID[2], 8) +
                IntToHex(CPUID[3], 8) +
                IntToHex(CPUID[4], 8);
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      Edit4.Text := GetCPUIDStr;
    end;