function GetHardDisk(): Pchar; stdcall;
var i: integer;
lhardid: Pchar;
lstr: string;
begin
for i := 0 to 3 do
begin
lhardid := GetIdeSerialNumber(i);
if lhardid <> '' then break;
end;
if lhardid = '' then Windows.messagebox(0, '无法获取硬盘序列号,请与供应商联系!', '信息提示', 0);
lstr := lhardid;
result := pchar(uppercase(trim(lstr)));
end;//这里出错了!
下面一个就不会出错了!
function IdeSerialIsRegsister(Key: string; ideRegsisterserial: string = ''): Boolean; stdcall;
var
IniFile: TIniFile;
lfilepath, lserial, lideid: string;
begin
lfilepath := GetCurrentDir + '\Hard.Ini';
IniFile := TIniFile.Create(lfilepath);
lserial := trim(ideRegsisterserial);
if trim(lserial) = '' then
lserial := IniFile.ReadString('Regsister', 'Serial', '');
FreeAndNil(IniFile);
lideid := GetHardDisk;
if trim(EncryptIdeSerial(Key, lideid)) <> lserial then
Result := False
else
Result := True;
end;
现在两个都是动态调用!
function GetHardDisk(): Pchar;
type TGetHardDisk = function(): Pchar; stdcall;
var
GetHardDisk: TGetHardDisk;
Hm: HMODULE;
begin
try
Hm := LoadLibrary(PChar('Hard.dll'));
if DWord(Hm) > 0 then
begin
GetHardDisk := GetProcAddress(Hm, 'GetHardDisk');
Result := GetHardDisk();
end;
finally
FreeLibrary(Hm);
end;
end;
调用方式!
var i: integer;
lhardid: Pchar;
lstr: string;
begin
for i := 0 to 3 do
begin
lhardid := GetIdeSerialNumber(i);
if lhardid <> '' then break;
end;
if lhardid = '' then Windows.messagebox(0, '无法获取硬盘序列号,请与供应商联系!', '信息提示', 0);
lstr := lhardid;
result := pchar(uppercase(trim(lstr)));
end;//这里出错了!
下面一个就不会出错了!
function IdeSerialIsRegsister(Key: string; ideRegsisterserial: string = ''): Boolean; stdcall;
var
IniFile: TIniFile;
lfilepath, lserial, lideid: string;
begin
lfilepath := GetCurrentDir + '\Hard.Ini';
IniFile := TIniFile.Create(lfilepath);
lserial := trim(ideRegsisterserial);
if trim(lserial) = '' then
lserial := IniFile.ReadString('Regsister', 'Serial', '');
FreeAndNil(IniFile);
lideid := GetHardDisk;
if trim(EncryptIdeSerial(Key, lideid)) <> lserial then
Result := False
else
Result := True;
end;
现在两个都是动态调用!
function GetHardDisk(): Pchar;
type TGetHardDisk = function(): Pchar; stdcall;
var
GetHardDisk: TGetHardDisk;
Hm: HMODULE;
begin
try
Hm := LoadLibrary(PChar('Hard.dll'));
if DWord(Hm) > 0 then
begin
GetHardDisk := GetProcAddress(Hm, 'GetHardDisk');
Result := GetHardDisk();
end;
finally
FreeLibrary(Hm);
end;
end;
调用方式!
type TGetHardDisk = function(): Pchar; stdcall;
var
GetHardDisk: TGetHardDisk;
Hm: HMODULE;
begin
try
Hm := LoadLibrary(PChar('Hard.dll'));
if Hm = 0 then //如果找到链接库
showmessage('Hard.dll 链接库没找到!')
else
begin
@GetHardDisk := GetProcAddress(Hm, 'GetHardDisk');
//你在这里没做判断
if not (@GetHardDisk = nil) then 如果找到该函数
Result := GetHardDisk(); //则执行该函数并返回结果
else
RaiseLastOsError;
end;
finally
FreeLibrary(Hm);
end;
end;