我必须使用现有的dll,但是遇到了问题。
以下是我尝试使用它的方法:
单位u_main;
...
implementation
procedure getUserData(var User, Pass: string); stdcall; external 'Common5.dll';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
u, p: string;
begin
getUserData(u,p);
end;
...
end.
当我按下按钮获取userData时,我得到一个EInvalidPointer异常。 dll已注册,在其他一些项目中,它正在使用和工作中。任何想法?
编辑: DLL是在Delphi7中创建的,现在用于Delphi 2009项目。 也许unicode字符串有类似的问题?
答案 0 :(得分:4)
您需要重建Delphi 7 DLL,使其遵循获取PChar和BufferLen参数的WinApi标准。你当前的实现有多个问题:
答案 1 :(得分:1)
除了使用PChar之外,请务必在调用GetUserData之前预先分配空间。即如果你将'foo'分配给一个空的pchar,你就会爆炸。因此要么使用静态长度PChar / PAnsiChar数组,要么使用这种技术:
var
s : AnsiString;
begin
setlength(s,256);
MyDLLProc(PAnsiChar(s));
end;