- 论坛徽章:
- 0
|
5可用积分
有一个DiskID.dll(见附件)
DiskID.rar
(18.79 KB, 下载次数: 110)
,内部含有一个获取本机硬盘ID的函数,我希望用PERL代码调用它,正确获得硬盘ID。因为不熟悉调用细节,尝试了很多次都不成功,希望有经验的大虾支招。
下面是这个DLL的PASCAL调用代码:- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls;
- type DRIVER_INFO_OK = record
- ModalNumber : array[0..39] of char;
- SerialNumber : array [0..19] of char;
- ControlNum : array[0..7]of char;
- DriveType : dword;
- Cylinders : dword;
- Heads : dword;
- Sectors : dword;
- end;
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Memo1: TMemo;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- function IsWinNT:boolean;
- stdcall; external 'DiskID.dll'
- name 'IsWinNT';
- function ReadPhysicalDrive(driveID:integer;buffer:Pointer;bufLen:integer):integer;
- stdcall; external 'DiskID.dll'
- name 'ReadPhysicalDriveInNT';
- function ReadPhysicalDrive9X(driveID:integer;buffer:Pointer;bufLen:integer):integer;
- stdcall; external 'DiskID.dll'
- name 'ReadDrivePortsInWin9X';
- function getHardDriveComputerID:int64;
- stdcall; external 'DiskID.dll'
- name 'getHardDriveComputerID';
- var
- Form1: TForm1;
- implementation
- {$R *.DFM}
- procedure TForm1.Button1Click(Sender: TObject);
- var
- x:DRIVER_INFO_OK;
- intRet:integer;
- begin
- if IsWinNT then
- ReadPhysicalDrive(0,@x,256)
- else
- ReadPhysicalDrive9X(0,@x,256);
- Memo1.Lines.Add(x.SerialNumber);
- Memo1.Lines.Add(x.ModalNumber);
- Memo1.Lines.Add(x.ControlNum);
- showmessage(inttostr(getHardDriveComputerID));
- end;
- end.
-
复制代码 |
|