有一个汉字转拼音的函数,在正常的文件中调用,没有问题,可是我把他封装在DLL里,就出现问题,
Function hz2py(hzstr: string):string; external hz2py.dll;
procedure TForm1.Button4Click(Sender: TObject);
begin
edit2.Text := hz2py(edit1.Text);
end;
错误:
Project Project1.exe raised exception class EInvalidPointer with message "Invalid pointer operation "
这是怎么回事啊?!解决问题,一定给分!
什么函数编译不过去了,你给的第一个函数
Function padl (Int: Integer) : pchar;
Var
ss : pchar;
Begin
ss := Inttostr (Int);
While LENGTH (ss) < 3 Do ss := 0 + ss;
result := ss
End;
改成这样
function padl(int :integer):PChar;
var
ss :PChar;
begin
ss :=PChar(IntToStr(int));
while Length(ss) < 3 do
ss :=0 + ss;
result :=ss;
end;
最好这样封装你的函数:Function hz2py(pHzstr,pPystr: pchar):integer;
这样简单而且比较安全.(如果学过C++或者熟悉指针操作,你就会明白其中的道理),然后你的函数实现改成:
Function hz2py(pHzstr,pPystr: pchar):integer;
Var
hzstr,pystr: string
PYSTR,S,S1,PYSTR1: string;
n,j,i,STRLEN : integer;
Begin
hzstr := string(pHzstr);
//下面的部分,把result用pPystr替代,注意把string转成PChar
S := DupeString ( , 1000);
S1 := DupeString ( , 809);
.......................
其他不在DLL输出的函数完全不必作任何修改.