P
PLWang
Unregistered / Unconfirmed
GUEST, unregistred user!
调用的时候总产生一个写错误 Access Violation at address... in Module 'DecodeDLL.dll' .Write of address 00000000
library DecodeDll;
uses
ShareMem,
SysUtils,
Classes;
{$R *.res}
function checknumber(const s : string): string;
...
function CHDecode(var s : string): String;
...
function GetInfo(original, PhoneNumber, content : PChar): LongBool; stdcall;
var str : string;
numberlen : integer;
begin
str := String(original);
if Length(str)<30 then Result := False;
numberlen := strtoint('$'+Copy(str,23,2));
if (numberlen mod 2)=0 then begin
StrCopy(PhoneNumber,PChar(checknumber(Copy(str,27,numberlen))));
Delete(str,1,26+numberlen);
end else begin
StrCopy(PhoneNumber,PChar(checknumber(Copy(str,27,numberlen+1))));
Delete(str,1,26+numberlen+1);
end;
Delete(str,1,8);
StrCopy(content,PChar(CHDecode(str)));
Result:= True;
end;
exports
GetInfo;
end.
调用部分:
function GetInfo(original, PhoneNumber, content : PChar): LongBool; stdcall;
external 'DecodeDll.dll'
procedure TForm1.Button1Click(Sender: TObject);
var str : String;
pnum : array[0..18] of char;
pcontent : array[0..256] of char;
begin
str := 'E901A002C655980B25B6696628FD900.........................................';
if GetInfo(PChar(str),pnum,pcontent) then
edit1.Text := string(pnum)+'>'+string(pcontent);
end;
library DecodeDll;
uses
ShareMem,
SysUtils,
Classes;
{$R *.res}
function checknumber(const s : string): string;
...
function CHDecode(var s : string): String;
...
function GetInfo(original, PhoneNumber, content : PChar): LongBool; stdcall;
var str : string;
numberlen : integer;
begin
str := String(original);
if Length(str)<30 then Result := False;
numberlen := strtoint('$'+Copy(str,23,2));
if (numberlen mod 2)=0 then begin
StrCopy(PhoneNumber,PChar(checknumber(Copy(str,27,numberlen))));
Delete(str,1,26+numberlen);
end else begin
StrCopy(PhoneNumber,PChar(checknumber(Copy(str,27,numberlen+1))));
Delete(str,1,26+numberlen+1);
end;
Delete(str,1,8);
StrCopy(content,PChar(CHDecode(str)));
Result:= True;
end;
exports
GetInfo;
end.
调用部分:
function GetInfo(original, PhoneNumber, content : PChar): LongBool; stdcall;
external 'DecodeDll.dll'
procedure TForm1.Button1Click(Sender: TObject);
var str : String;
pnum : array[0..18] of char;
pcontent : array[0..256] of char;
begin
str := 'E901A002C655980B25B6696628FD900.........................................';
if GetInfo(PChar(str),pnum,pcontent) then
edit1.Text := string(pnum)+'>'+string(pcontent);
end;