如何在 Inno Setup 中将 VCL 样式应用于基于 DLL 的表单以进行卸载?无法导入 dll

How to apply VCL Styles to DLL-based forms in Inno Setup for uninstall? Cannot Import dll

我正在尝试为我的安装程序添加 VCL 样式 (Inno Setup 5.5.6 (a))。安装期间样式加载正确,但当我尝试卸载时出现错误

Runtime Error(at-1:0): Cannot Import dll:VclStylesInno.dll.

而且我无法卸载我的程序。

有人知道我能做什么吗?
感谢帮助

#define VCLStylesSkinPath "{localappdata}\VCLStylesSkin"

[Files]
;Install
Source: "VclStylesinno.dll"; DestDir: "{app}"; Flags: dontcopy
Source: "Styles\Auric.vsf"; DestDir: "{app}"; Flags: dontcopy
;Uninstall
Source: "VclStylesinno.dll"; DestDir: "{#VCLStylesSkinPath}"; \
  Flags: uninsneveruninstall
Source: "Styles\Auric.vsf"; DestDir: "{#VCLStylesSkinPath}"; \
  Flags: uninsneveruninstall

[Code]

{ Import the LoadVCLStyle function from VclStylesInno.DLL }
procedure LoadVCLStyle(VClStyleFile: String);
  external 'LoadVCLStyleA@files:VclStylesInno.dll stdcall setuponly';
procedure LoadVCLStyle_UnInstall(VClStyleFile: String);
  external 'LoadVCLStyleA@VclStylesInno.dll stdcall uninstallonly';

{ Import the UnLoadVCLStyles function from VclStylesInno.DLL }
procedure UnLoadVCLStyles;
  external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall setuponly';
procedure UnLoadVCLStyles_UnInstall;
  external 'UnLoadVCLStyles@VclStylesInno.dll stdcall uninstallonly';
    
function InitializeUninstall: Boolean;
begin
  Result := True;
  LoadVCLStyle_UnInstall(ExpandConstant('Styles\Auric.vsf'));
end;

procedure DeinitializeUninstall();
begin
  UnLoadVCLStyles_UnInstall;
end;

您没有指定 VclStylesInno.dll 的卸载副本的路径。

正确的做法是:

procedure LoadVCLStyle_UnInstall(VClStyleFile: String); 
  external 'LoadVCLStyleA@{#VCLStylesSkinPath}\VclStylesInno.dll stdcall uninstallonly';

下次就跟着官方instructions for uninstalling the VCL Styles for Inno Setup.

有关更多详细信息,甚至可能比官方解决方案更好的解决方案,另请参阅