【发布时间】:2016-02-08 03:04:41
【问题描述】:
我需要你的帮助。我正在尝试从 Inno Setup (ANSI) 中用 Delphi 10 Seattle 编写的 DLL 调用函数。但我不明白是什么问题。如果我在 Delphi 中创建应用程序并从 DLL 调用此函数,它就可以完美运行!见代码清单:
Delphi DLL:
function Process(Pb: TProgressBar): Integer; stdcall;
var
I: integer;
begin
for I := 0 to 1000 do
begin
Pb.Position := I;
Pb.Update;
Sleep(10);
end;
end;
Exports
Process;
Inno 设置 (ANSI):
function Count(Progr: TNewProgressBar): integer; external 'Process@files:CallC.dll stdcall delayload';
procedure NewButton1Click(Sender: TObject);
begin
Count(NewProgressBar1);
end;
通话后我得到访问冲突。但是,我阅读的 dpr 文件中的注释,ShareMem 写入第一行,但效果为零。
请告诉我如何从 Delphi DLL 正确更新 Inno Setup 中的进度条。
【问题讨论】:
-
我认为你不能期望在安装程序和 dll 之间传递一个像进度条这样的对象。您需要在安装程序中访问 prog 栏。
-
另外,你说你可以从 Delphi 主机调用 DLL。但即使这样也是错误的。如果它有效,那是靠运气而不是设计。
-
Ammm...我是怎么做到的?
-
您需要回调安装程序以推进 PB。
-
当然可以,但是怎么做呢?也许你给我看简单的示例代码?
标签: delphi dll progress-bar inno-setup pascalscript