Prototyp und Beschreibung der Funktion setstringallocate() (Nicht freischaltpflichtige Funktion) |
setstringallocate() Schalten der automatischen Bereitstellung von Speicherplatz für return strings. Prototyp der DLL-Funktion in C++ Syntax (Kleinschreibung beachten!): extern "C" __declspec(dllimport) unsigned long __stdcall setstringallocate( unsigned long lSwitch); Prototyp der DLL-Funktion in Visual Objects Syntax: _DLL function setstringallocate(; lSwitch as logic); // 4 Byte as logic pascal:geodll32.setstringallocate // 4 Byte Die Funktion schaltet die automatische Bereitstellung (allocation) von Speicherplatz für die Rückgabe von Null-terminierten Strings (PSZ, Pointer string zero) ein- oder aus. GeoDLL kann den Speicherplatz für zurückzugebende PSZ intern allokieren und über eine global gespeicherte Adresse dem rufenden Programm zugänglich machen. Im rufenden Programm muss dann weder Speicher allokiert noch Speicher wieder freigegeben werden. In einer Multithreading-Umgebung ist die Allokation über globale Adressen jedoch nicht möglich, weil die threads sich gegenseitig beeinflussen würden. Wenn in lSwitch der Wert TRUE übergeben wird, erfolgt die automatische Bereitstellung von Speicher über globale Adressen innerhalb von GeoDLL. Im aufrufenden Programm muss der für zurückzugebende PSZs benötigte Speicherplatz dafür weder allokiert noch später wieder freigegeben werden. Wenn in lSwitch der Wert FALSE übergeben wird, muss das rufende Programm für jede String-Rückgabe den Speicherplatz selbstständig allokieren und nach der Verwendung wieder freigeben. Die Größe des benötigten Speicherplatzes ist in den Prototypen der jeweiligen Funktionen vorgeschlagen. Nach dem Programmaufruf bzw. dem Laden der GeoDLL ist die automatische Bereitstellung von Speicherplatz in globalen Adressen standardmäßig eingeschaltet. Es gibt weitere Schalter, die GeoDLL auf den Betrieb in verschiedenen Umgebungen vorbereiten. Dies sind die Funktionen setinternerrsys() setstaticuse() setmultithreading() setsilence() seteventloop() In GeoDLL werden PSZ-Variablen grundsätzlich nicht als Rückgabewert von Funktionen zurückgegeben, sondern als Referenzen auf PSZ-Variablen, die im Funktionskopf als Parameter übergeben werden. Die Übergabe per Referenz anstelle der Übergabe per Value ist notwendig, um Speicherplatz für die PSZ-Parameter innerhalb von GeoDLL verwalten zu können. Die Übergabe eines PSZ als Referenz entspricht in C oder C++ der Syntax "char**". In Worten ausgedrückt ist das ein "Zeiger auf einen Zeiger auf das erste Zeichen eines Strings" oder eine "Adresse mit der Adresse des ersten Zeichens eines Strings". Die Parameter werden folgendermaßen übergeben bzw. zurückgegeben: lSwitch Schalter für die automatische Bereitstellung von Speicher TRUE Automatische Bereitstellung von Speicher einschalten (default) FALSE Automatische Bereitstellung von Speicher ausschalten returnWert Im Fehlerfall gibt die Funktion FALSE zurück, sonst TRUE. Freischaltung: Die Funktion ist nicht freischaltpflichtig. |