gpt4 book ai didi

windows - Delphi DLL 问题 - 收到错误的整数值和访问冲突问题

转载 作者:可可西里 更新时间:2023-11-01 10:00:01 26 4
gpt4 key购买 nike

我很难掌握 Delphi 7 中的 DLL。我有两个问题:

1) 该过程采用整数参数 - 但 dll 收到的值与我传递的值不同。

2) 调用 dll 的应用程序在函数完成后因访问冲突而崩溃。

这是我的 dll 代码:

library apmDLL;

uses
Classes, Messages, Windows, Dialogs, sysutils ;

const

WM_MY_MESSAGE = WM_USER + 1;

procedure sendtoACRPM (functionKey : integer); stdcall;
begin
showmessage('You sent - '+inttostr(functionKey));
showmessage('Finished Now');
end;

exports sendtoACRPM;

end.

所以当我用下面的代码调用它时,我得到:

'发送 - 1'

'你发送了 - 1636532'

'现在完成'

然后调用应用程序因访问冲突而崩溃。

调用应用程序如下所示:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, shlobj, shellapi;

const

WM_MY_MESSAGE = WM_USER + 1;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button2: TButton;
procedure Button2Click(Sender: TObject);



private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
procedure sendtoACRPM (functionKey : integer) ; external 'apmDLL.dll';

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var
myInt: integer;
begin
myInt := strtoint(edit1.text);
showmessage('Sending - ' + inttostr(myInt));
sendtoACRPM(myInt);
end;

end.

知道我在这里做错了什么吗?

最佳答案

在 DLL 和调用代码声明中都需要 stdcall。你只在 DLL 中有它。

双方的调用约定需要匹配。 :-)

procedure sendtoACRPM (functionKey : integer); stdcall; external 'apmDLL.dll';

您应该使用标准 Windows MessageBox而不是 ShowMessage,这样 DLL 也可以从非 Delphi 应用程序中使用。

关于windows - Delphi DLL 问题 - 收到错误的整数值和访问冲突问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203454/

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