Access Basic migrieren
Ich versuche gerade, einige Access-Basic-Module aus einer Access-2.0-Applikation auf Access 95 beziehungsweise 97 umzubauen. Ich bekomme aber die API-Aufrufe für die Clipboard-Funktionen in User32.dll nicht in den Griff. Access meldet hartnäckig, daß die aufgerufenen Funktionen nicht in der DLL sind, obwohl ich mich mit QuickView von ihrem Vorhandensein überzeugen konnte. Haben sich eventuell die Typen der Argumente so drastisch geändert, daß die Fehlermeldung daher rührt? Microsoft liefert ja leider in der Office-Professional-Version unprofessionellerweise keine API-Beschreibung mit.
- Detlef Grell
Ich versuche gerade, einige Access-Basic-Module aus einer Access-2.0-Applikation auf Access 95 beziehungsweise 97 umzubauen. Ich bekomme aber die API-Aufrufe für die Clipboard-Funktionen in User32.dll nicht in den Griff. Access meldet hartnäckig, daß die aufgerufenen Funktionen nicht in der DLL sind, obwohl ich mich mit QuickView von ihrem Vorhandensein überzeugen konnte. Haben sich eventuell die Typen der Argumente so drastisch geändert, daß die Fehlermeldung daher rührt? Microsoft liefert ja leider in der Office-Professional-Version unprofessionellerweise keine API-Beschreibung mit.
Es kommen mehrere Sachen zusammen. Daß man statt User.dll User32.dll und statt Kernel.dll Kernel32.dll benutzen sollte, ist immerhin noch dokumentiert. Die Fehlermeldung, daß eine Funktion nicht vorhanden ist, tritt normalerweise nicht bei falschen Typen/Argumenten auf. Eine beliebte Falle liegt darin, daß die Groß-/Kleinschreibung von Funktionsnamen unter Access 2.0 mit User/Kernel.dll keine Rolle spielte, sehr wohl aber ab Access 95 mit User32/Kernel32.dll. Speziell bei den Clipboard-Funktionen kann man hauchzarte Unterschiede in der Schreibweise lange übersehen, etwa `EmptyClipBoard´ statt korrekterweise `EmptyClipboard´.
Überdies wurden auch Datentypen verändert. Die Funktion GlobalAlloc zum Beispiel liefert jetzt ein 32 Bit breites Speicher-Handle. Wenn man das weiterhin in eine 16-Bit-Variable einliest, so gibt das in Access Basic erst mal keine Fehlermeldung - ebensowenig, wenn man mit diesem `halben Handle´ über die Funktion GlobalLock einen FarPointer auf den Speicherbereich holen will. Da als Handle aber ein Wort, in dem 16 signifikante Bits fehlen, an die DLL übergeben wird, ist das Handle normalerweise ungültig. Doch erst durch eine Abfrage darauf, ob der Aufruf von GlobalLock erfolgreich war, läßt sich ein Fehler feststellen. (gr) (gr)