gpt4 book ai didi

delphi - Delphi-使用现有dll的问题

转载 作者:行者123 更新时间:2023-12-03 18:25:12 25 4
gpt4 key购买 nike

我必须使用现有的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字符串或类似的东西有问题?

最佳答案

您需要重建Delphi 7 DLL,使其遵循获取PChar和BufferLen参数的WinApi标准。当前的实现存在多个问题:


字符串是特定于平台的,它的实现可能会在delphi版本之间更改(并且确实有所更改)。您不应该在平台之外使用字符串!
您将参数传递为“ var”,这表明DLL可能会更改user和/或pass的值。字符串是一种特殊的托管类型,对其进行更改需要为新的字符串分配内存。反过来,这要求您在DLL和EXE之间共享内存管理器(使用sharemem.pas和BorlandMM.dll-或变体)。问题是,在不同版本的Delphi之间共享内存管理器是不受支持的配置! (来自embarcadero论坛的元数据)
Delphi 7希望接收一个简单的AnsiString(1个字节字符),而Delphi 2009 exe则发送Unicode字符串(每个字符2个字节)。

关于delphi - Delphi-使用现有dll的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3202289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com