ISCmplr.dpr 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. library ISCmplr;
  2. {
  3. Inno Setup
  4. Copyright (C) 1997-2025 Jordan Russell
  5. Portions by Martijn Laan
  6. For conditions of distribution and use, see LICENSE.TXT.
  7. Compiler DLL
  8. }
  9. uses
  10. SafeDLLPath in '..\Components\SafeDLLPath.pas',
  11. SysUtils,
  12. Shared.CompilerInt.Struct in 'Src\Shared.CompilerInt.Struct.pas',
  13. Shared.PreprocInt in 'Src\Shared.PreprocInt.pas',
  14. Compiler.Compile in 'Src\Compiler.Compile.pas',
  15. Compiler.SetupCompiler in 'Src\Compiler.SetupCompiler.pas',
  16. Compiler.Messages in 'Src\Compiler.Messages.pas',
  17. Compiler.StringLists in 'Src\Compiler.StringLists.pas',
  18. Compiler.CompressionHandler in 'Src\Compiler.CompressionHandler.pas',
  19. Compiler.HelperFunc in 'Src\Compiler.HelperFunc.pas',
  20. Compiler.BuiltinPreproc in 'Src\Compiler.BuiltinPreproc.pas',
  21. Shared.Struct in 'Src\Shared.Struct.pas',
  22. Shared.ScriptFunc in 'Src\Shared.ScriptFunc.pas',
  23. Compiler.ScriptFunc in 'Src\Compiler.ScriptFunc.pas',
  24. Compiler.ScriptCompiler in 'Src\Compiler.ScriptCompiler.pas',
  25. Compiler.ScriptClasses in 'Src\Compiler.ScriptClasses.pas',
  26. Compiler.ExeUpdateFunc in 'Src\Compiler.ExeUpdateFunc.pas',
  27. Compression.Base in 'Src\Compression.Base.pas',
  28. Compression.Zlib in 'Src\Compression.Zlib.pas',
  29. Compression.bzlib in 'Src\Compression.bzlib.pas',
  30. Compression.LZMACompressor in 'Src\Compression.LZMACompressor.pas',
  31. Shared.FileClass in 'Src\Shared.FileClass.pas',
  32. ChaCha20 in '..\Components\ChaCha20.pas',
  33. Shared.VerInfoFunc in 'Src\Shared.VerInfoFunc.pas',
  34. PathFunc in '..\Components\PathFunc.pas',
  35. TrustFunc in '..\Components\TrustFunc.pas',
  36. Shared.CommonFunc in 'Src\Shared.CommonFunc.pas',
  37. SHA256 in '..\Components\SHA256.pas',
  38. Shared.DebugStruct in 'Src\Shared.DebugStruct.pas',
  39. Shared.LangOptionsSectionDirectives in 'Src\Shared.LangOptionsSectionDirectives.pas',
  40. Shared.SetupMessageIDs in 'Src\Shared.SetupMessageIDs.pas',
  41. Shared.SetupEntFunc in 'Src\Shared.SetupEntFunc.pas',
  42. Shared.SetupSectionDirectives in 'Src\Shared.SetupSectionDirectives.pas',
  43. Shared.SetupTypes in 'Src\Shared.SetupTypes.pas',
  44. Shared.SetupSteps in 'Src\Shared.SetupSteps.pas',
  45. SimpleExpression in '..\Components\SimpleExpression.pas',
  46. Shared.DotNetVersion in 'Src\Shared.DotNetVersion.pas',
  47. PBKDF2 in '..\Components\PBKDF2.pas',
  48. ECDSA in '..\Components\ECDSA.pas',
  49. ISSigFunc in '..\Components\ISSigFunc.pas',
  50. StringScanner in '..\Components\StringScanner.pas',
  51. Shared.EncryptionFunc in 'Src\Shared.EncryptionFunc.pas',
  52. UnsignedFunc in '..\Components\UnsignedFunc.pas';
  53. {$IMAGEBASE $00800000}
  54. {$SETPEOSVERSION 6.1}
  55. {$SETPESUBSYSVERSION 6.1}
  56. {$WEAKLINKRTTI ON}
  57. {$R Res\ISCmplr.images.res}
  58. {$R Res\ISCmplr.images.dark.res}
  59. {$R Res\ISCmplr.version.res}
  60. function ISDllCompileScript(const Params: TCompileScriptParamsEx): Integer;
  61. stdcall;
  62. begin
  63. Result := ISCompileScript(Params, False);
  64. end;
  65. type
  66. PWrapperData = ^TWrapperData;
  67. TWrapperData = record
  68. CallerParams: PCompileScriptParamsEx;
  69. LastLineRead: String;
  70. end;
  71. { Does not support iscbNotifyPreproc }
  72. function WrapperCallbackProc(Code: Integer; var Data: TCompilerCallbackData;
  73. AppData: Longint): Integer;
  74. stdcall;
  75. var
  76. WrapperData: PWrapperData;
  77. CallerParams: PCompileScriptParamsEx;
  78. AnsiStatusMsg, AnsiOutputExeFilename, AnsiErrorMsg, AnsiErrorFilename: AnsiString;
  79. begin
  80. WrapperData := PWrapperData(AppData);
  81. CallerParams := WrapperData.CallerParams;
  82. case Code of
  83. iscbReadScript:
  84. begin
  85. Result := CallerParams.CallbackProc(Code, Data, CallerParams.AppData);
  86. if Assigned(Data.LineRead) then begin
  87. WrapperData.LastLineRead := String(PAnsiChar(Data.LineRead));
  88. Data.LineRead := PWideChar(WrapperData.LastLineRead);
  89. end;
  90. end;
  91. iscbNotifyStatus:
  92. begin
  93. if Assigned(Data.StatusMsg) then begin
  94. AnsiStatusMsg := AnsiString(Data.StatusMsg);
  95. Data.StatusMsg := PWideChar(PAnsiChar(AnsiStatusMsg));
  96. end;
  97. Result := CallerParams.CallbackProc(Code, Data, CallerParams.AppData);
  98. end;
  99. iscbNotifySuccess:
  100. begin
  101. if Assigned(Data.OutputExeFilename) then begin
  102. AnsiOutputExeFilename := AnsiString(Data.OutputExeFilename);
  103. Data.OutputExeFilename := PWideChar(PAnsiChar(AnsiOutputExeFilename));
  104. end;
  105. Result := CallerParams.CallbackProc(Code, Data, CallerParams.AppData);
  106. end;
  107. iscbNotifyError:
  108. begin
  109. if Assigned(Data.ErrorMsg) then begin
  110. AnsiErrorMsg := AnsiString(Data.ErrorMsg);
  111. Data.ErrorMsg := PWideChar(PAnsiChar(AnsiErrorMsg));
  112. end;
  113. if Assigned(Data.ErrorFilename) then begin
  114. AnsiErrorFilename := AnsiString(Data.ErrorFilename);
  115. Data.ErrorFilename := PWideChar(PAnsiChar(AnsiErrorFilename));
  116. end;
  117. Result := CallerParams.CallbackProc(Code, Data, CallerParams.AppData);
  118. end;
  119. else
  120. Result := CallerParams.CallbackProc(Code, Data, CallerParams.AppData);
  121. end;
  122. end;
  123. function ISDllCompileScriptA(const Params: TCompileScriptParamsEx): Integer;
  124. stdcall;
  125. var
  126. WrapperData: TWrapperData;
  127. WrapperParams: PCompileScriptParamsEx;
  128. P: PAnsiChar;
  129. Options: String;
  130. begin
  131. if ((Params.Size <> SizeOf(Params)) and
  132. (Params.Size <> SizeOf(TCompileScriptParams))) or
  133. not Assigned(Params.CallbackProc) then begin
  134. Result := isceInvalidParam;
  135. Exit;
  136. end;
  137. WrapperData.CallerParams := @Params;
  138. GetMem(WrapperParams, Params.Size);
  139. try
  140. Move(Params, WrapperParams^, Params.Size);
  141. WrapperParams.CallbackProc := WrapperCallbackProc;
  142. WrapperParams.AppData := Integer(@WrapperData);
  143. if Assigned(Params.CompilerPath) then
  144. WrapperParams.CompilerPath := PWideChar(String(PAnsiChar(Params.CompilerPath)));
  145. if Assigned(Params.SourcePath) then
  146. WrapperParams.SourcePath := PWideChar(String(PAnsiChar(Params.SourcePath)));
  147. if (Params.Size <> SizeOf(TCompileScriptParams)) and Assigned(Params.Options) then begin
  148. P := PAnsiChar(Params.Options);
  149. while P^ <> #0 do begin
  150. Options := Options + String(P) + #0;
  151. Inc(P, StrLen(P) + 1);
  152. end;
  153. WrapperParams.Options := PWideChar(Options);
  154. end;
  155. Result := ISCompileScript(WrapperParams^, False);
  156. finally
  157. FreeMem(WrapperParams);
  158. end;
  159. end;
  160. function ISDllGetVersion: PCompilerVersionInfo; stdcall;
  161. begin
  162. Result := ISGetVersion;
  163. end;
  164. exports
  165. ISDllCompileScript name 'ISDllCompileScriptW',
  166. ISDllCompileScriptA name 'ISDllCompileScript',
  167. ISDllGetVersion;
  168. begin
  169. { The user might call ISDllCompileScript from multiple threads
  170. simultaneously, so set our instance of the Delphi memory manager to
  171. thread-safe mode }
  172. IsMultiThread := True;
  173. end.