{"id":55001633,"date":"2026-12-01T00:00:00","date_gmt":"2026-11-09T18:53:01","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1633"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Alte_APIDeklarationen_fit_fuer_64_Bit_machen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/","title":{"rendered":"Alte API-Deklarationen fit f&uuml;r 64 Bit machen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/be74dc12aad8415688327ec607f961c4\" width=\"1\" height=\"1\" alt=\"\"><b>Sie haben ein altes VBA-Projekt geerbt, das Funktionen der Windows-API aufruft, und unter 64-Bit-Access meldet der Compiler Fehler in den Declare-Zeilen? Dann m&uuml;ssen die Deklarationen angepasst werden. Wie das Schritt f&uuml;r Schritt gelingt, welche Rolle die Compilerkonstanten VBA7 und Win64 dabei spielen und an welchen Stellen die Pr&uuml;fung wirklich n&ouml;tig ist, zeigt der vorliegende Beitrag.<\/b><\/p>\n<h2>Was sich mit 64 Bit &auml;ndert<\/h2>\n<p>Lange Zeit war das ein Randthema, denn Office wurde standardm&auml;&szlig;ig in der 32-Bit-Version installiert. Ab Office 2019 und Microsoft 365 ist laut Microsoft die 64-Bit-Version die Vorgabe. Wer Anwendungen weitergibt, trifft deshalb immer h&auml;ufiger auf 64-Bit-Access, und der Code muss damit zurechtkommen. Ge&auml;ndert werden muss er &uuml;brigens nur dort, wo er unter 64 Bit l&auml;uft. Wer weiterhin ausschlie&szlig;lich 32 Bit einsetzt, merkt nichts.<\/p>\n<p>Der Kern des Problems: Die Windows-API kennt Handles und Zeiger. Ein Fensterhandle, wie es <b>FindWindow<\/b> liefert, ist im Kern eine Adresse, und die ist unter 64-Bit-Windows 64 Bit breit. Der VBA-Datentyp <b>Long<\/b> hat dagegen immer 32 Bit. Weil VBA 6 keinen eigenen Datentyp f&uuml;r Zeiger kannte, nahm man dort einfach <b>Long<\/b>. Passt ein 64-Bit-Wert nicht hinein, wird er abgeschnitten, und das kann bis zum Absturz der Anwendung f&uuml;hren.<\/p>\n<p>Microsoft hat daf&uuml;r mit VBA 7 (Office 2010) drei Neuerungen eingef&uuml;hrt. Erstens muss jede <b>Declare<\/b>-Anweisung in 64-Bit-Office das Schl&uuml;sselwort <b>PtrSafe<\/b> enthalten. Zweitens gibt es den Datentyp <b>LongPtr<\/b>. Er entspricht in 32-Bit-Office einem <b>Long<\/b> und in 64-Bit-Office einem <b>LongLong<\/b>, w&auml;chst also mit der Plattform.<\/p>\n<p>Drittens gibt es den Datentyp <b>LongLong<\/b> selbst, eine vorzeichenbehaftete 64-Bit-Ganzzahl, die es nur in 64-Bit-Office gibt. Die Hintergr&uuml;nde zu den VBA-Versionen erl&auml;utert der Beitrag <b>32-Bit, 64-Bit, VBA-Version und Co. (www.access-im-unternehmen.de\/1322)<\/b>. Hier geht es um die praktische Umr&uuml;stung.<\/p>\n<h2>Die Compilerkonstanten im &Uuml;berblick<\/h2>\n<p>Damit ein Projekt in mehreren Umgebungen kompiliert werden kann, gibt es vordefinierte Compilerkonstanten. Sie werden ausschlie&szlig;lich mit der Direktive <b>#If &#8230; Then &#8230; #Else<\/b> verwendet und gelten im ganzen Projekt. Eigene Konstanten mit denselben Namen lassen sich nicht anlegen. Wichtig sind diese:<\/p>\n<ul>\n<li><b>VBA7<\/b>: Die Entwicklungsumgebung ist VBA 7 (Office 2010 oder neuer). Nur dann kennt der Compiler <b>PtrSafe<\/b> und <b>LongPtr<\/b>.<\/li>\n<li><b>VBA6<\/b>: Die Umgebung ist mit VBA 6 kompatibel. Das gilt auch unter VBA 7.<\/li>\n<li><b>Win64<\/b>: Die Umgebung ist 64-Bit-Office. Nur hier gibt es <b>LongLong<\/b>.<\/li>\n<li><b>Win32<\/b>: Die Umgebung ist mit 32 Bit kompatibel. Das ist auch in 64-Bit-Office der Fall.<\/li>\n<li><b>Win16<\/b> und <b>Mac<\/b>: 16-Bit-Umgebungen und Macintosh. F&uuml;r Access unter Windows sind beide immer <b>False<\/b>.<\/li>\n<\/ul>\n<p>Die beiden Zeilen mit <b>VBA6<\/b> und <b>Win32<\/b> sind die eigentlichen Stolpersteine. Weil <b>Win32<\/b> auch unter 64 Bit <b>True<\/b> liefert, w&uuml;rde eine Abfrage auf <b>Win32<\/b> vor der Abfrage auf <b>Win64<\/b> den 64-Bit-Zweig nie erreichen.<\/p>\n<p>Dasselbe gilt f&uuml;r <b>VBA6<\/b> und <b>VBA7<\/b>. Die richtige Reihenfolge lautet deshalb immer vom Neuen zum Alten. Die Funktion <b>Plattform<\/b> im Modul <b>mdlKonstanten<\/b> zeigt es:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Plattform()<span style=\"color:blue;\"> As String<\/span>\r\n    #If Win64 Then\r\n        Plattform = \"64 Bit\"\r\n    #ElseIf Win32 Then\r\n        Plattform = \"32 Bit\"\r\n    #Else\r\n        Plattform = \"16 Bit\"\r\n    #End If\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Auf unserem Testrechner mit 32-Bit-Access liefert <b>Debug.Print Plattform()<\/b> im Direktbereich den Wert <b>32 Bit<\/b>. Die Funktion <b>KonstantenText<\/b> im selben Modul gibt alle f&uuml;nf Konstanten aus:<\/p>\n<pre>VBA6=True; VBA7=True; Win32=True; Win64=False; Mac=<span style=\"color:blue;\">False<\/span><\/pre>\n<p>Zwei Dinge fallen auf: <b>VBA6<\/b> ist auch unter VBA 7 <b>True<\/b>, und <b>Win32<\/b> ist wahr, und das bliebe es auch unter 64 Bit. Wer die Konstanten also in der falschen Reihenfolge abfragt, landet im falschen Zweig, ohne dass der Compiler etwas bem&auml;ngelt.<\/p>\n<h2>Die Beispieldatenbank<\/h2>\n<p>In der Beispieldatenbank <b>ApiDeklarationenFuer64Bit.accdb<\/b> finden Sie vier Module. Das Modul <b>mdlApiAlt<\/b> enth&auml;lt vier typische Deklarationen im alten Stil, das Modul <b>mdlApiNeu<\/b> dieselben Deklarationen in der angepassten Form. Dazu kommen <b>mdlKonstanten<\/b> mit den Compilerkonstanten und <b>mdlApiBeispiele<\/b> mit weiteren Beispielen. Die vier ersten Funktionen haben wir bewusst unterschiedlich gew&auml;hlt: <b>GetTickCount<\/b> liefert nur eine Zahl, <b>FindWindow<\/b> gibt ein Handle zur&uuml;ck, <b>GetWindowRect<\/b> erwartet ein Handle und eine Struktur, und <b>FlashWindowEx<\/b> enth&auml;lt ein Handle innerhalb einer Struktur.<\/p>\n<p>So treffen wir die F&auml;lle, die in der Praxis am h&auml;ufigsten vorkommen. Die alten Deklarationen sehen so aus (siehe Listing 1).<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Declare Function GetTickCount Lib \"kernel32\" ()<span style=\"color:blue;\"> As Long<\/span>\r\n<span style=\"color:blue;\">Private <\/span>Declare Function FindWindow Lib \"user32\" Alias \"FindWindowA\" (ByVal lpClassName<span style=\"color:blue;\"> As String<\/span>, _\r\n    ByVal lpWindowName<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Long<\/span>\r\n<span style=\"color:blue;\">Private <\/span>Declare Function GetWindowRect Lib \"user32\" (ByVal hWnd<span style=\"color:blue;\"> As Long<\/span>, lpRect<span style=\"color:blue;\"> As <\/span>RECT)<span style=\"color:blue;\"> As Long<\/span>\r\n<span style=\"color:blue;\">Private <\/span>Declare Function FlashWindowEx Lib \"user32\" (pfwi<span style=\"color:blue;\"> As <\/span>FLASHWINFO)<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Die vier Deklarationen im alten Stil<\/span><\/b><\/p>\n<h2>Schritt 1: PtrSafe erg&auml;nzen<\/h2>\n<p>Der erste Schritt ist mechanisch: Vor <b>Function<\/b> oder <b>Sub<\/b> kommt in jeder <b>Declare<\/b>-Zeile das Schl&uuml;sselwort <b>PtrSafe<\/b>. Das reicht allein aber nicht, und hier liegt die eigentliche Gefahr. Microsoft zeigt es an der Funktion <b>GetActiveWindow<\/b> (siehe Listing 2).<\/p>\n<pre>Declare Function GetActiveWindow Lib \"user32\" ()<span style=\"color:blue;\"> As Long<\/span>\r\nDeclare PtrSafe Function GetActiveWindow Lib \"user32\" ()<span style=\"color:blue;\"> As Long<\/span>\r\nDeclare PtrSafe Function GetActiveWindow Lib \"user32\" ()<span style=\"color:blue;\"> As Long<\/span>Ptr<\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Drei Stufen derselben Deklaration (Beispiel aus der Microsoft-Dokumentation)<\/span><\/b><\/p>\n<p>Die erste Zeile ist der alte Stand. Unter 64 Bit meldet der Compiler, dass das Schl&uuml;sselwort <b>PtrSafe<\/b> fehlt. Die zweite Zeile kompiliert dort ohne Fehler, liefert aber einen abgeschnittenen Wert zur&uuml;ck, denn <b>PtrSafe<\/b> sagt dem Compiler nur, dass Sie die Zeile f&uuml;r 64 Bit gedacht haben.<\/p>\n<p>Erst die dritte Zeile ist richtig. Das ist die gef&auml;hrlichste Stufe: Der Compiler schweigt, und der Fehler zeigt sich erst zur Laufzeit.<\/p>\n<h2>Schritt 2: Handles und Zeiger als LongPtr<\/h2>\n<p>Jetzt fragen wir bei jedem Parameter und jedem R&uuml;ckgabewert: Ist das eine Zahl oder ein Handle beziehungsweise ein Zeiger? Die Dokumentation der API-Funktion verr&auml;t es. Typen wie <b>HWND<\/b>, <b>HANDLE<\/b> oder <b>LPVOID<\/b> werden zu <b>LongPtr<\/b>. Typen wie <b>DWORD<\/b> oder <b>int<\/b> bleiben <b>Long<\/b>.<\/p>\n<p>Daraus folgt f&uuml;r unsere vier Funktionen: <b>GetTickCount<\/b> bekommt nur <b>PtrSafe<\/b>, denn die R&uuml;ckgabe ist eine Zahl. Bei <b>FindWindow<\/b> wird die R&uuml;ckgabe zu <b>LongPtr<\/b>, bei <b>GetWindowRect<\/b> der Parameter <b>hWnd<\/b>.<\/p>\n<p>Der R&uuml;ckgabewert von <b>GetWindowRect<\/b> ist ein Wahrheitswert und bleibt <b>Long<\/b>. Die neue Fassung zeigt Listing 3.<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function GetTickCount Lib \"kernel32\" ()<span style=\"color:blue;\"> As Long<\/span>\r\n<span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function FindWindow Lib \"user32\" Alias \"FindWindowA\" (ByVal lpClassName<span style=\"color:blue;\"> As String<\/span>, _\r\n    ByVal lpWindowName<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Long<\/span>Ptr\r\n<span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function GetWindowRect Lib \"user32\" (ByVal hWnd<span style=\"color:blue;\"> As Long<\/span>Ptr, lpRect<span style=\"color:blue;\"> As <\/span>RECT)<span style=\"color:blue;\"> As Long<\/span>\r\n<span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function FlashWindowEx Lib \"user32\" (pfwi<span style=\"color:blue;\"> As <\/span>FLASHWINFO)<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Die angepassten Deklarationen<\/span><\/b><\/p>\n<p>Damit ist die Deklaration fertig, aber nicht der Aufruf. Die Variable, die das Handle aufnimmt, muss ebenfalls <b>LongPtr<\/b> sein. Die Funktion <b>FensterBreite<\/b> im Modul <b>mdlApiNeu<\/b> ermittelt die Breite des Access-Fensters:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>FensterBreite()<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>hWnd<span style=\"color:blue;\"> As Long<\/span>Ptr\r\n    <span style=\"color:blue;\">Dim <\/span>udtRect<span style=\"color:blue;\"> As <\/span>RECT\r\n    hWnd = FindWindow(\"OMain\", vbNullString)\r\n    GetWindowRect hWnd, udtRect\r\n    FensterBreite = udtRect.<span style=\"color:blue;\">Right<\/span> - udtRect.Left\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Der Klassenname <b>OMain<\/b> steht f&uuml;r das Hauptfenster von Access. Wer die Variable <b>hWnd<\/b> weiter als <b>Long<\/b> deklariert, erh&auml;lt in 32-Bit-Access kein Problem und merkt den Fehler erst, wenn die Anwendung auf 64 Bit l&auml;uft. Genau das ist der heimt&uuml;ckischste Stolperstein bei dieser Umstellung. Rufen wir die Funktion im Direktbereich auf, erhalten wir die Breite des Fensters in Pixeln: <b>Debug.Print FensterBreite()<\/b>.<\/p>\n<h2>Strukturen mit Handles<\/h2>\n<p>Schwieriger wird es bei Strukturen. Die Struktur <b>RECT<\/b> besteht nur aus vier <b>Long<\/b>-Werten und bleibt unver&auml;ndert. Die Struktur <b>FLASHWINFO<\/b> f&uuml;r <b>FlashWindowEx<\/b> enth&auml;lt dagegen ein Fensterhandle. Das Element <b>hWnd<\/b> muss deshalb <b>LongPtr<\/b> sein:<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Type FLASHWINFO\r\n    cbSize<span style=\"color:blue;\"> As Long<\/span>\r\n    hWnd<span style=\"color:blue;\"> As Long<\/span>Ptr\r\n    dwFlags<span style=\"color:blue;\"> As Long<\/span>\r\n    uCount<span style=\"color:blue;\"> As Long<\/span>\r\n    dwTimeout<span style=\"color:blue;\"> As Long<\/span>\r\nEnd Type<\/pre>\n<p>Das Element <b>cbSize<\/b> verlangt die Gr&ouml;&szlig;e der Struktur in Byte. Hier steckt eine Falle: Mit einem <b>LongPtr<\/b> im Inneren kann sich die Gr&ouml;&szlig;e der Struktur zwischen 32 und 64 Bit &auml;ndern. Eine feste Zahl w&auml;re falsch.<\/p>\n<p>Deshalb ermitteln wir die Gr&ouml;&szlig;e mit <b>Len<\/b> (<b>udtFlash.cbSize = Len(udtFlash)<\/b>). In der Prozedur <b>FensterBlinken<\/b> ist das bereits so umgesetzt. Dasselbe gilt f&uuml;r jede andere Struktur, die Handles oder Zeiger enth&auml;lt.<\/p>\n<h2>Weitere Beispiele aus der Praxis<\/h2>\n<p>Das Modul <b>mdlApiBeispiele<\/b> enth&auml;lt f&uuml;nf weitere Deklarationen, an denen sich die Regeln gut erkennen lassen (siehe Listing 4).<\/p>\n<pre><span style=\"color:blue;\">Private <\/span>Declare PtrSafe Sub Sleep Lib \"kernel32\" (ByVal dwMilliseconds<span style=\"color:blue;\"> As Long<\/span>)\r\n<span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function GetUserName Lib \"advapi32.dll\" _\r\n    Alias \"GetUserNameA\" (ByVal lpBuffer<span style=\"color:blue;\"> As String<\/span>, nSize<span style=\"color:blue;\"> As Long<\/span>)<span style=\"color:blue;\"> As Long<\/span>\r\n<span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function GetModuleHandle Lib \"kernel32\" _\r\n    Alias \"GetModuleHandleA\" (ByVal lpModuleName<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As Long<\/span>Ptr\r\n<span style=\"color:blue;\">Private <\/span>Declare PtrSafe Sub CopyMemory Lib \"kernel32\" Alias \"RtlMoveMemory\" (Destination<span style=\"color:blue;\"> As <\/span>Any, Source<span style=\"color:blue;\"> As <\/span>Any, _\r\n    ByVal Length<span style=\"color:blue;\"> As Long<\/span>Ptr)\r\n<span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function EnumWindows Lib \"user32\" _\r\n    (ByVal lpEnumFunc<span style=\"color:blue;\"> As Long<\/span>Ptr, ByVal lParam<span style=\"color:blue;\"> As Long<\/span>Ptr)<span style=\"color:blue;\"> As Long<\/span>\r\n<span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function IsWindowVisible Lib \"user32\" (ByVal hWnd<span style=\"color:blue;\"> As Long<\/span>Ptr)<span style=\"color:blue;\"> As Long<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Weitere angepasste Deklarationen<\/span><\/b><\/p>\n<p>Bei <b>Sleep<\/b> ist nichts zu tun au&szlig;er <b>PtrSafe<\/b>, denn die Wartezeit in Millisekunden ist eine Zahl. Auch bei <b>GetUserName<\/b> bleibt alles <b>Long<\/b>: Der Puffer ist ein <b>String<\/b>, und <b>nSize<\/b> wird als Referenz &uuml;bergeben, was automatisch die Adresse der Variablen liefert. Das ist ein wichtiger Punkt. Nicht jeder Parameter, der in C ein Zeiger ist, wird in VBA zu <b>LongPtr<\/b>.<\/p>\n<p>&Uuml;bergeben wir die Variable selbst, sorgt VBA f&uuml;r die Adresse. <b>LongPtr<\/b> brauchen wir nur dort, wo wir den Zeigerwert selbst in einer Variablen halten oder &uuml;bergeben:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>BenutzerName()<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strPuffer<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngLaenge<span style=\"color:blue;\"> As Long<\/span>\r\n    strPuffer = String(255, vbNullChar)\r\n    lngLaenge = <span style=\"color:blue;\">Len<\/span>(strPuffer)\r\n    <span style=\"color:blue;\">If <\/span>GetUserName(strPuffer, lngLaenge) &lt;&gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n        BenutzerName = <span style=\"color:blue;\">Left<\/span>(strPuffer, lngLaenge - 1)\r\n    <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Auf unserem Testrechner liefert <b>Debug.Print BenutzerName()<\/b> den Windows-Benutzernamen.<\/p>\n<p>Anders bei <b>GetModuleHandle<\/b>. Die Funktion liefert ein Handle, also steht in Deklaration und Variable <b>LongPtr<\/b>:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>ModulHandleVorhanden()<span style=\"color:blue;\"> As Boolean<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>hModul<span style=\"color:blue;\"> As Long<\/span>Ptr\r\n    hModul = GetModuleHandle(\"kernel32\")\r\n    ModulHandleVorhanden = (hModul &lt;&gt; 0)\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Ein Sonderfall ist <b>CopyMemory<\/b>, die Deklaration f&uuml;r <b>RtlMoveMemory<\/b>. Ziel und Quelle sind mit <b>As Any<\/b> deklariert, hier &uuml;bergeben wir einfach die Variablen. Die L&auml;nge ist dagegen eine Gr&ouml;&szlig;enangabe in der Breite eines Zeigers und deshalb ein <b>LongPtr<\/b>. Unter 32 Bit &auml;ndert das nichts, unter 64 Bit ist es notwendig:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>KopieTest()<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngQuelle<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngZiel<span style=\"color:blue;\"> As Long<\/span>\r\n    lngQuelle = 4711\r\n    CopyMemory lngZiel, lngQuelle, LenB(lngQuelle)\r\n    KopieTest = lngZiel\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Der Aufruf <b>Debug.Print KopieTest()<\/b> liefert <b>4711<\/b>.<\/p>\n<h2>Callbacks mit AddressOf<\/h2>\n<p>Besonders aufmerksam m&uuml;ssen wir bei R&uuml;ckruffunktionen sein. <b>EnumWindows<\/b> ruft f&uuml;r jedes Fenster eine Funktion auf, deren Adresse wir mit <b>AddressOf<\/b> &uuml;bergeben. Die Adresse ist ein Zeiger, also <b>LongPtr<\/b> (Parameter <b>lpEnumFunc<\/b>). Ebenso tr&auml;gt die R&uuml;ckruffunktion selbst Handles und Zeiger. Die Funktion <b>EnumFensterProc<\/b> z&auml;hlt die sichtbaren Fenster:<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>EnumFensterProc(ByVal hWnd<span style=\"color:blue;\"> As Long<\/span>Ptr, _\r\n        ByVal lParam<span style=\"color:blue;\"> As Long<\/span>Ptr)<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">If <\/span>IsWindowVisible(hWnd) &lt;&gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n        mlngAnzahl = mlngAnzahl + 1\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    EnumFensterProc = 1\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p>Aufgerufen wird sie &uuml;ber die Funktion <b>SichtbareFenster<\/b>, die mit <b>EnumWindows AddressOf EnumFensterProc, 0<\/b> die Z&auml;hlung startet.<\/p>\n<p>Die R&uuml;ckruffunktion muss in einem Standardmodul stehen, und die Parameter m&uuml;ssen exakt zur Windows-Vorgabe passen: <b>hWnd<\/b> und <b>lParam<\/b> als <b>LongPtr<\/b>, der R&uuml;ckgabewert als <b>Long<\/b>. Das Ergebnis von <b>Debug.Print SichtbareFenster()<\/b> h&auml;ngt davon ab, wie viele Fenster gerade ge&ouml;ffnet sind.<\/p>\n<h2>Wo wirklich gepr&uuml;ft werden muss<\/h2>\n<p>Nicht jede Zahl in einer API-Deklaration muss angefasst werden. Wir m&uuml;ssen nur dort pr&uuml;fen, wo ein Wert die Breite eines Zeigers hat. Als Faustregel hilft diese Zuordnung anhand des Windows-Typs aus der Dokumentation der Funktion:<\/p>\n<ul>\n<li><b>LongPtr<\/b>: <b>HWND<\/b>, <b>HANDLE<\/b>, alle anderen Handles, Zeiger (<b>LPVOID<\/b>), Adressen aus <b>AddressOf<\/b>, <b>SIZE_T<\/b> sowie <b>WPARAM<\/b>, <b>LPARAM<\/b> und <b>LRESULT<\/b>, wie sie etwa <b>SendMessage<\/b> verwendet.<\/li>\n<li><b>Long<\/b>: <b>DWORD<\/b>, <b>BOOL<\/b>, <b>int<\/b>, <b>UINT<\/b>, Flags, Z&auml;hler, Zeitangaben. Auch Parameter, die per <b>ByRef<\/b> eine Zahl entgegennehmen, bleiben <b>Long<\/b>.<\/li>\n<li><b>String<\/b>, <b>Byte<\/b>, <b>Integer<\/b>: unver&auml;ndert.<\/li>\n<li><b>LongLong<\/b>: nur f&uuml;r echte 64-Bit-Ganzzahlen, etwa sehr gro&szlig;e Dateigr&ouml;&szlig;en. Den Typ gibt es nur unter 64 Bit.<\/li>\n<\/ul>\n<p>Daraus ergeben sich drei Regeln, an denen die meisten Fehler h&auml;ngen. Erstens: <b>LongPtr<\/b> und <b>LongLong<\/b> sind nicht dasselbe. <b>LongPtr<\/b> l&auml;uft auf beiden Plattformen, <b>LongLong<\/b> nur unter 64 Bit. Wer <b>LongLong<\/b> f&uuml;r ein Handle verwendet, bricht den Code unter 32 Bit. Zweitens: Ein <b>LongLong<\/b> l&auml;sst sich nicht implizit einem kleineren Typ zuweisen. Das sch&uuml;tzt vor versehentlichem Abschneiden. Wer es bewusst will, wandelt mit <b>CLng<\/b> um.<\/p>\n<p>F&uuml;r die umgekehrte Richtung gibt es <b>CLngLng<\/b> und, plattformunabh&auml;ngig, <b>CLngPtr<\/b>. Drittens: Ein Literal, das gr&ouml;&szlig;er ist als der gr&ouml;&szlig;te <b>Long<\/b>-Wert, wird sonst zu <b>Double<\/b>. Soll es ein <b>LongLong<\/b> sein, h&auml;ngen Sie das Typzeichen <b>^<\/b> an.<\/p>\n<p>Ebenfalls zu pr&uuml;fen sind Variablen, die Adressen aufnehmen. Die Funktionen <b>VarPtr<\/b>, <b>StrPtr<\/b> und <b>ObjPtr<\/b> liefern laut Microsoft unter 64 Bit einen <b>LongPtr<\/b>, unter 32 Bit einen <b>Long<\/b>. Wer das Ergebnis in einer <b>Long<\/b>-Variablen ablegt, schneidet die Adresse unter 64 Bit ab.<\/p>\n<p>Die Gr&ouml;&szlig;e einer <b>LongPtr<\/b>-Variablen liefert die Funktion <b>ZeigerLaenge<\/b> im Modul <b>mdlKonstanten<\/b> mit <b>LenB<\/b>. Bei uns sind es <b>4<\/b> Byte, unter 64 Bit sind es laut Microsoft acht.<\/p>\n<h2>Wann Sie VBA7 und Win64 wirklich brauchen<\/h2>\n<p>Wer nur Access 2010 oder neuer unterst&uuml;tzt, braucht die Compilerkonstanten f&uuml;r die Deklarationen nicht. <b>PtrSafe<\/b> und <b>LongPtr<\/b> laufen in VBA 7 sowohl unter 32 als auch unter 64 Bit. Das ist der Normalfall, und die Listings in diesem Beitrag kommen deshalb ohne <b>#If<\/b> aus.<\/p>\n<p>Anders ist es, wenn ein Projekt auch noch unter Access 2007 oder &auml;lter laufen soll, denn dort kennt der Compiler <b>PtrSafe<\/b> nicht. Dann ben&ouml;tigen Sie f&uuml;r jede <b>Declare<\/b>-Anweisung beide Varianten, und zwar in dieser Form:<\/p>\n<pre>#If VBA7 Then\r\n    <span style=\"color:blue;\">Private <\/span>Declare PtrSafe Function GetTickCount _\r\n        Lib \"kernel32\" ()<span style=\"color:blue;\"> As Long<\/span>\r\n#Else\r\n    <span style=\"color:blue;\">Private <\/span>Declare Function GetTickCount _\r\n        Lib \"kernel32\" ()<span style=\"color:blue;\"> As Long<\/span>\r\n#End If<\/pre>\n<p>Auch die Variablen m&uuml;ssen dann mitspielen, denn <b>LongPtr<\/b> kennt VBA 6 auch nicht. Hier ist der Aufwand deutlich h&ouml;her, und die Frage, ob sich die Bereitstellung f&uuml;r Access 2007 &uuml;berhaupt noch lohnt, sollten Sie vorher kl&auml;ren.<\/p>\n<p>Die Konstante <b>Win64<\/b> brauchen Sie dagegen nur, wenn der Code selbst unterschiedlich laufen muss, etwa weil Sie eine echte 64-Bit-Ganzzahl ben&ouml;tigen.<\/p>\n<p>Dort verwenden wir sie, um den passenden Datentyp zu w&auml;hlen. Die Funktion <b>GrosseZahlLaenge<\/b> im Modul <b>mdlKonstanten<\/b> verwendet im Kern dieses Muster:<\/p>\n<pre>#If Win64 Then\r\n    <span style=\"color:blue;\">Dim <\/span>lngGross<span style=\"color:blue;\"> As Long<\/span>Long\r\n#Else\r\n    <span style=\"color:blue;\">Dim <\/span>lngGross<span style=\"color:blue;\"> As Long<\/span>\r\n#End If<\/pre>\n<p>Unter 32 Bit wird nur der <b>Else<\/b>-Zweig kompiliert, der <b>LongLong<\/b>-Zweig bleibt unber&uuml;cksichtigt und f&uuml;hrt nicht zu einem Fehler.<\/p>\n<p>Die Funktion liefert hier mit <b>LenB<\/b> den Wert <b>4<\/b>. Das ist der Grund, warum sich <b>LongLong<\/b> nur innerhalb von <b>#If Win64<\/b> sicher verwenden l&auml;sst.<\/p>\n<h2>Die Funktionsf&auml;higkeit pr&uuml;fen<\/h2>\n<p>Zum Test enth&auml;lt jedes der beiden Module <b>mdlApiAlt<\/b> und <b>mdlApiNeu<\/b> eine Funktion, die alle vier API-Aufrufe ausf&uuml;hrt und das Ergebnis als Text zur&uuml;ckgibt: <b>ApiAltTest<\/b> und <b>ApiNeuTest<\/b>.<\/p>\n<p>Sie vergleichen unter anderem das per <b>FindWindow<\/b> gefundene Handle mit <b>Application.hWndAccessApp<\/b>. Stimmen beide &uuml;berein, liefert der Test an der Stelle <b>Hwnd=Wahr<\/b>. Wichtig: In 32-Bit-Access laufen alte und neue Fassung fehlerfrei, weil <b>LongPtr<\/b> dort ein <b>Long<\/b> ist. Der Unterschied zeigt sich erst unter 64 Bit, und dort kompiliert die alte Fassung gar nicht erst. Testen Sie Ihre umger&uuml;steten Projekte deshalb unbedingt auch in einer 64-Bit-Installation und rufen Sie jede API-Funktion mindestens einmal auf.<\/p>\n<h2>Checkliste f&uuml;r die Umr&uuml;stung<\/h2>\n<p>Hier noch einmal die wichtigsten Punkte:<\/p>\n<ul>\n<li>Jede <b>Declare<\/b>-Zeile bekommt <b>PtrSafe<\/b>. Allein reicht das nicht.<\/li>\n<li>Handles, Zeiger, Adressen aus <b>AddressOf<\/b>, <b>SIZE_T<\/b>, <b>WPARAM<\/b> und <b>LPARAM<\/b> werden zu <b>LongPtr<\/b>.<\/li>\n<li>Zahlen (<b>DWORD<\/b>, <b>int<\/b>, Flags) bleiben <b>Long<\/b>.<\/li>\n<li>Variablen, die Handles oder Ergebnisse von <b>VarPtr<\/b>, <b>StrPtr<\/b> und <b>ObjPtr<\/b> aufnehmen, ebenfalls als <b>LongPtr<\/b> deklarieren.<\/li>\n<li>Strukturen mit Handles oder Zeigern anpassen und die Gr&ouml;&szlig;e mit <b>Len<\/b> bestimmen.<\/li>\n<li><b>LongLong<\/b> nur innerhalb von <b>#If Win64<\/b> verwenden.<\/li>\n<li>Bei Fallunterscheidungen die Konstanten vom Neuen zum Alten abfragen: erst <b>Win64<\/b>, dann <b>Win32<\/b>, erst <b>VBA7<\/b>, dann <b>VBA6<\/b>.<\/li>\n<li>Das Projekt kompilieren und jede API-Funktion mindestens einmal aufrufen, am besten in 32- und in 64-Bit-Access.<\/li>\n<\/ul>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Die Umr&uuml;stung alter API-Deklarationen folgt einem festen Muster: <b>PtrSafe<\/b> erg&auml;nzen, Handles und Zeiger auf <b>LongPtr<\/b> umstellen, Zahlen als <b>Long<\/b> belassen und Strukturgr&ouml;&szlig;en mit <b>Len<\/b> ermitteln. Die Compilerkonstanten brauchen Sie nur f&uuml;r Access 2007 oder f&uuml;r echte 64-Bit-Ganzzahlen.<\/p>\n<p>Wie Sie die Deklarationen in einem gro&szlig;en Projekt &uuml;berhaupt finden, zeigen die Beitr&auml;ge <b>API-Funktionen finden und speichern (www.access-im-unternehmen.de\/1312)<\/b> und <b>Verwaiste API-Funktionen finden (www.access-im-unternehmen.de\/1314)<\/b>.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>ApiDeklarationenFuer64Bit.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/FDD643B0-9C90-4206-B383-C077E9253E4C\/aiu_1633.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sie haben ein altes VBA-Projekt geerbt, das Funktionen der Windows-API aufruft, und unter 64-Bit-Access meldet der Compiler Fehler in den Declare-Zeilen? Dann m&uuml;ssen die Deklarationen angepasst werden. Wie das Schritt f&uuml;r Schritt gelingt, welche Rolle die Compilerkonstanten VBA7 und Win64 dabei spielen und an welchen Stellen die Pr&uuml;fung wirklich n&ouml;tig ist, zeigt der vorliegende Beitrag.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[662026,66062026,44000025],"tags":[],"class_list":["post-55001633","post","type-post","status-publish","format-standard","hentry","category-662026","category-66062026","category-VBA_und_Programmiertechniken"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Alte API-Deklarationen fit f&uuml;r 64 Bit machen - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Alte API-Deklarationen fit f&uuml;r 64 Bit machen - Access im Unternehmen\" \/>\n<meta property=\"og:description\" content=\"Sie haben ein altes VBA-Projekt geerbt, das Funktionen der Windows-API aufruft, und unter 64-Bit-Access meldet der Compiler Fehler in den Declare-Zeilen? Dann m&uuml;ssen die Deklarationen angepasst werden. Wie das Schritt f&uuml;r Schritt gelingt, welche Rolle die Compilerkonstanten VBA7 und Win64 dabei spielen und an welchen Stellen die Pr&uuml;fung wirklich n&ouml;tig ist, zeigt der vorliegende Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-09T18:53:01+00:00\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"14\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/5efd1af2265d5b82ecce8bdb2db6694d\"},\"headline\":\"Alte API-Deklarationen fit f&uuml;r 64 Bit machen\",\"datePublished\":\"2026-11-09T18:53:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/\"},\"wordCount\":2305,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/be74dc12aad8415688327ec607f961c4\",\"articleSection\":[\"2026\",\"6\\\/2026\",\"VBA und Programmiertechniken\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/\",\"name\":\"Alte API-Deklarationen fit f&uuml;r 64 Bit machen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/be74dc12aad8415688327ec607f961c4\",\"datePublished\":\"2026-11-09T18:53:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/be74dc12aad8415688327ec607f961c4\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/be74dc12aad8415688327ec607f961c4\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Alte API-Deklarationen fit f&uuml;r 64 Bit machen\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/5efd1af2265d5b82ecce8bdb2db6694d\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Alte API-Deklarationen fit f&uuml;r 64 Bit machen - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/","og_locale":"de_DE","og_type":"article","og_title":"Alte API-Deklarationen fit f&uuml;r 64 Bit machen - Access im Unternehmen","og_description":"Sie haben ein altes VBA-Projekt geerbt, das Funktionen der Windows-API aufruft, und unter 64-Bit-Access meldet der Compiler Fehler in den Declare-Zeilen? Dann m&uuml;ssen die Deklarationen angepasst werden. Wie das Schritt f&uuml;r Schritt gelingt, welche Rolle die Compilerkonstanten VBA7 und Win64 dabei spielen und an welchen Stellen die Pr&uuml;fung wirklich n&ouml;tig ist, zeigt der vorliegende Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/","og_site_name":"Access im Unternehmen","article_published_time":"2026-11-09T18:53:01+00:00","author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"14\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/5efd1af2265d5b82ecce8bdb2db6694d"},"headline":"Alte API-Deklarationen fit f&uuml;r 64 Bit machen","datePublished":"2026-11-09T18:53:01+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/"},"wordCount":2305,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/be74dc12aad8415688327ec607f961c4","articleSection":["2026","6\/2026","VBA und Programmiertechniken"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/","url":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/","name":"Alte API-Deklarationen fit f&uuml;r 64 Bit machen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/be74dc12aad8415688327ec607f961c4","datePublished":"2026-11-09T18:53:01+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/be74dc12aad8415688327ec607f961c4","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/be74dc12aad8415688327ec607f961c4"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Alte_APIDeklarationen_fit_fuer_64_Bit_machen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Alte API-Deklarationen fit f&uuml;r 64 Bit machen"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/5efd1af2265d5b82ecce8bdb2db6694d","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001633","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001633"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001633\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001633"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001633"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}