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

GetProcAddress / GetDiskSpaceEx


4 replies to this topic

swesthues

swesthues
  • Members
  • 2 posts

Posted 20 August 2002 - 09:32

Hallo,

ich benutze IS 6.31 und möchte (wenn verfügbar) GetDiskSpaceEx aufrufen. In der Installshield-Hilfe steht, GetDiskSpaceEx funktioniert erst ab Win 95 OEM SR 2. Daher sollte man über GetProcAddress feststellen, ob GetDiskFreeSpaceExA in der Windows-API vorhanden ist.

Ich habe hier mal den Auszug aus der Hilfe kopiert:

/* The Windows API functions GetProcAddress and GetModuleHandle are prototyped in Winapi.h, which is automatically included when you include Ifx.h in your setup. */
if GetProcAddress ( GetModuleHandle("kernel32.dll"),
   "GetDiskFreeSpaceExA" )!=0 then
   nFreeBytes = GetDiskSpaceEx ( "C:", BYTES );
else
   /* If GetDiskFreeSpaceEx is not supported,
   call GetDiskSpace instead of GetDiskSpaceEx. */
   nFreeBytes = GetDiskSpace ( "C:" );
endif;

Es fängt damit an, dass die API-Funktionen nicht automatisch verfügbar sind, obwohl es in der Doku so steht. Das ist natürlich kein Problem, ich include winapi.h einfach von Hand.

Dann bekomme ich aber immer aber den Fehler:

lexfunc.rul(58): error C8025: 'GetProcAddress' : undefined identifier


Woran liegt das?

Gruß
Simon Westhues

sebastian

sebastian
  • Members
  • 43 posts

Posted 20 August 2002 - 09:42

Wo ist das Problem? Bei mir funktioniert es problemlos:

Code Sample


#include "winapi.h"

----

function OnBegin()      
number nFreeBytes;
string svResult;
begin
/* The Windows API functions GetProcAddress and GetModuleHandle are prototyped in Winapi.h, which is automatically included when you include Ifx.h in your setup. */
if GetProcAddress ( GetModuleHandle("kernel32.dll"),
  "GetDiskFreeSpaceExA" )!=0 then
  nFreeBytes = GetDiskSpaceEx ( "C:", BYTES );
else
  /* If GetDiskFreeSpaceEx is not supported,
  call GetDiskSpace instead of GetDiskSpaceEx. */
  nFreeBytes = GetDiskSpace ( "C:" );
endif;

Sprintf(svResult, "Verfügbarer Speicher: '%d'", nFreeBytes);
MessageBox(svResult, INFORMATION);

abort;

end;



Oder hab ich was überlesen?
Alle menschlichen Fehler sind Ungeduld,
ein vorzeitiges Abbrechen des Methodischen,
ein scheinbares Einpfählen der scheinbaren Sache.
Kafka

sebastian

sebastian
  • Members
  • 43 posts

Posted 20 August 2002 - 09:44

übrigens:

in der hilfe steht zum fehler c8025 folgende info:

Quote

Meldung
'text' : Variable nicht definiert

Beschreibung
Die in text angegebene Variable wurde nicht definiert.

Hinweis(e)
Alle Variablen in einem Skript müssen vor der Verwendung im Hauptprogrammblock oder einer Funktion deklariert werden. Überprüfen Sie also, ob die Variable deklariert wurde. Wenn sie deklariert wurde, überprüfen Sie, ob die Schreibweise exakt der Schreibweise an der Fehlerstelle entspricht.


Kann es also sein, daß du vergessen hast einen Wert zu deklarieren?
Alle menschlichen Fehler sind Ungeduld,
ein vorzeitiges Abbrechen des Methodischen,
ein scheinbares Einpfählen der scheinbaren Sache.
Kafka

swesthues

swesthues
  • Members
  • 2 posts

Posted 20 August 2002 - 10:03

Oh mann, da hab ich wohl ein Brett vorm Kopf gehabt.

Das Problem war, dass ich in setup.rul zuerst eine eigene InstallScript-Datei included habe, in der ich GetProcAddress brauchte, und danach erst winapi.h.

Danke, hast mir sehr geholfen :-)

Gruß
Simon Westhues

sebastian

sebastian
  • Members
  • 43 posts

Posted 20 August 2002 - 10:08

aha, die reihenfolge der abhängikeiten stimmte also nicht ;))))

immer wieder gerne, westhues :)

lg sebastian
Alle menschlichen Fehler sind Ungeduld,
ein vorzeitiges Abbrechen des Methodischen,
ein scheinbares Einpfählen der scheinbaren Sache.
Kafka