dll文件中的函数是://*************取得硬盘序列号*****************
function Get_DiskSerialNo(DriveID : char) : string; stdcall;
var
VolumeSerialNumber : DWORD;
MaximumComponentLength : DWORD;
FileSystemFlags : DWORD;
begin
result := '';
try
GetVolumeInformation(PChar(DriveID + ':\'),nil, 0, @VolumeSerialNumber,
MaximumComponentLength, FileSystemFlags,nil, 0);
result := IntToHex(HiWord(VolumeSerialNumber), 4) + '-'
+ IntToHex(LoWord(VolumeSerialNumber), 4);
except
ShowMessage('系统出错,内存溢出!');
end;
end;在调用时会出现;"invalid pointer Operation"
function Get_DiskSerialNo(DriveID : char) : string; stdcall;
var
VolumeSerialNumber : DWORD;
MaximumComponentLength : DWORD;
FileSystemFlags : DWORD;
begin
result := '';
try
GetVolumeInformation(PChar(DriveID + ':\'),nil, 0, @VolumeSerialNumber,
MaximumComponentLength, FileSystemFlags,nil, 0);
result := IntToHex(HiWord(VolumeSerialNumber), 4) + '-'
+ IntToHex(LoWord(VolumeSerialNumber), 4);
except
ShowMessage('系统出错,内存溢出!');
end;
end;在调用时会出现;"invalid pointer Operation"
external 'PunUnitLib.dll' name 'Get_DiskSerialNo'; //得到硬盘卷标号
function Encrypt(s: string; key: word): string; far stdcall;
external 'PunUnitLib.dll' name 'Encrypt';
function Decrypt(s: string; key: word): string; far stdcall;
external 'PunUnitLib.dll' name 'Decrypt';这样的
var
temp:Pchar;
begin
temp:=StrCat(DriveID+':\');
end;
试试这个,另外最好用MessageBox
我有真正的读取出场序列号的程序,要得话给我邮件[email protected]
invalid pointer operation!有没有高手会的
再函数中所有出现的string类型,全部替换为PChar类型,
还有我用 Uses shareMem 时,应有这样的提示的
function Get_DiskSerialNo(DriveID : char) : PChar; stdcall;
因为Delphi中的字符串和C/C++(Dll中用此中方式)中的表示方式不一样
Delphi字符串第一个字节意思是整个串的长度,后面才是串的内容,
而C++中从前面开始就是串的内容,最后一字节是标识符‘\0’
所以如在Delphi中的Dll定义为String,在外部调用时要出错