Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Arbeiten mit Pointern


Best Answer Spitfyr , 21 May 2015 - 09:29

Ich habe eine Lösung gefunden :D

 

Da es mit SprintfBox der Pointer angezeigt wird klappt das auch mit Sprintf

Sprintf(svGUID,"%s",pString);
 

Go to the full post


1 reply to this topic

Spitfyr

Spitfyr
  • Full Members
  • 162 posts

Posted 20 May 2015 - 15:42

Wir wollen zur eindeutigen identifikation unserer Installation eine GUID erzeugen und diese in lokal speichern.

 

Zum Erzeugen der GUID verwende ich von Windows bereitgestellte Funktionen wie folgt:

 

prototype RPCRT4.UuidCreate(POINTER);
prototype RPCRT4.UuidToStringA(POINTER, POINTER);
....

function GetGUID(hMSI)
  STRING      svGUID;
  POINTER     pString;
  struct_GUID vGUID;
begin
 ....
 RPCRT4.UuidCreate(&vGUID);
 RPCRT4.UuidToStringA(&vGUID, &pString);  //diese Funktion erzeugt die GUID in der bekannten Form

 SprintfBox(WARNING,"GUID","GUID %s",pString);  //die GUID wird korrekt angezeigt
  svGUID = pString;                                                      //lässt sich nicht kompilieren, da ein String erwartet wird
 ....
end;

 

SprintfBox zeigt mit dann auch eine GUID korrekt an.

Damit ich die GUID aber in der Registry speichern kann will ich sie einer lokalen Variable zuweisen.

Dies schlägt aber immer fehl, da dass InstallScript immer anmerkt, dass an der entsprechenden Stelle eine String variable

benötigt wird (svGUID = pString).

 

Wie muss ich vorgehen, um auf pString im Scrpt mit den String-Funktionen zugreifen zu können.

Es geht auch nicht, dasw ich vor dem Aufruf der Funkion pString= &svGUID setze, da die Funktion

UuidToString nur einen Zeiger erwartet und die Speicherverwaltung für diesen selbst übernimmt.

 

 

Grüße

  Spitfyr

 

 



Spitfyr

Spitfyr
  • Full Members
  • 162 posts

Posted 21 May 2015 - 09:29   Best Answer

Ich habe eine Lösung gefunden :D

 

Da es mit SprintfBox der Pointer angezeigt wird klappt das auch mit Sprintf

Sprintf(svGUID,"%s",pString);