【发布时间】:2015-01-03 04:08:37
【问题描述】:
我想制作一个简单的程序,将 Edit1.Text 设置为“6”(例如,但使用 DLL - 这很重要)。这是代码: 单位:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:integer;
implementation
procedure test; external 'lib.dll' name 'test';
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
test;
Edit1.Text:=Inttostr(a);
end;
end.
还有DLL文件:
library lib;
uses
Winapi.Windows, System.SysUtils;
var
a:integer;
procedure test;
begin
a:=6;
end;
exports
test;
{$R *.res}
begin
end.
问题是,Edit1.Text 还是 0。你能帮帮我吗?
【问题讨论】:
-
如果需要在.exe和.dll之间共享一个变量,标准的解决方案是使用内存映射文件。
-
@user24 我不这么认为。映射用于跨进程内存共享。这是进程中的。
-
如果您启动 2 个 .exe 副本,加载相同的 .dll,您将获得跨进程。但我相信你会不同意:)
-
@user24 不,这是两个进程。但我没有看到问题中的跨进程。