Laden...

Aufruf von C-Funktion time in Inno Setup

Letzter Beitrag vor 8 Jahren 7 Posts 2.418 Views
Aufruf von C-Funktion time in Inno Setup

Hallo,

ich versuche mit über ein Inno-Setup-Skript einen Unix-Timestamp in die Registry zu schreiben.
Leider scheitert das ganze aber offenbar an dem Aufruf der DLL.

Kann mir jemand sagen, was bei dem folgenden Code nicht funktioniert?


[Registry]
Root: "HKLM64"; Subkey: "SOFTWARE\Name\{#MyAppName}"; ValueType: qword; ValueName: "TStamp"; ValueData: "{code:GetUnixTimestamp(0)}"; Flags: createvalueifdoesntexist

[Code]
//Unix Timestamp
function GetUnixTimestamp(ATimerPtr: Int64): Int64; 
external 'time@msvcrt.dll cdecl';

Ich habe den Code von StackOverflow und schon 1000 mal abgewandelt.

Habe nochmals in der Hilfe gelesen. Es werden in der Code-Section nur die Typen String und Boolean unterstützt.

Hi Caveman,

"funktioniert nicht" ist jetzt auch keine aussagekräftige Fehlermeldung, mit der man dir irgendwie weiterhelfen könnte. Daß du den Code "1000 mal abgewandelt" hast, macht es auch nicht leichter. Aber du hast sicher gesehen, daß in dem von dir verlinkten Code "_time32@msvcrt.dll" verwendet wird?

Weeks of programming can save you hours of planning

Ist die DLL überhaupt im Systempfad vorhanden? Diese wird ja nur bei einem C bzw. C++ Projekt vom Visual Studio benutzt (deployed).
Kannst mal

where msvcrt.dll

in der DOS-Konsole (Eingabeaufforderung) eingeben.

[gelöst] Aufruf von C-Funktion time in Inno Setup

Hallo,

Danke für die Antworten.
Ja, die Dll ist in Windows\System32 vorhanden.
Inno-Setup kann jedenfalls damit umgehen. Das Problem ist nur, dass in der Code-Section als Rückgabewerte nur String und Boolean erlaubt sind.

Ich hatte gehofft, dass die Inno-Profis hier das auf den ersten Blick sehen.

Meine Lösung ist jetzt eine Konsolenanwendung, die in der Run-Section aufgerufen wird und den Wert in die Registry schreibt.

Da muss man ein bisschen "Bugusing" betreiben 😃
Man kann statt einem Int64 auch einen String in qword reinschreiben und damit funktioniert es dann


[Registry]
Root: "HKLM64"; Subkey: "SOFTWARE\Name\{#MyAppName}"; ValueType: qword; ValueName: "TStamp"; ValueData: "{code:GetTimestamp}"; Flags: createvalueifdoesntexist

[Code]//Unix Timestamp
function GetUnixTimestamp(ATimerPtr: Int64): Int64; 
external 'time@msvcrt.dll cdecl';

function GetTimeStamp: string;
var
  value:int64;
begin
  value := GetUnixTimeStamp(0);
  Result := IntToStr(value);
end;

Was ich mich aber eher frage... Gibt es nicht auch in Inno eine Funktion für den UnixTimestamp?

Hallo Mossi,

es hat jetzt etwas gedauert, aber heute habe ich Deine Lösung endlich ausprobieren können.
Es wird ein Wert in die Registry geschrieben. Allerdings stimmt der nicht, denn es werden nochmals acht Nullen hinter dem eigentlichen Wert drangehängt.
Habe es deshalb jetzt mit Integer gemacht.
Vielen Dank jedenfalls für Deine Lösung!

Mir ist nicht bekannt, dass Inno eine eingebaute Funktion dafür hätte.