On Wed, 19 Jun 2019 20:01:04 +0200, "Ulrich Möller" posted:
Hallo Ulrich,
Danke für den Link.
Der grundsätzliche Unterschied zwischen Long und LongPTR war mir bekannt.
Die Tücke liegt offenbar im Detail.
Ich weiß, dass ich langsam nerve :-)
Ich knabbere immer noch an einer Sache rum.
Eine Prozedur läuft unter A 2016 32 bit problemlos.
Unter A 2016 64 bit stürzt sie gnadenlos ohne Fehlermeldung ab.
Ich sehe da im Ereignisprotokoll
MSACCESS.EXE
16.0.4813.1000
5c476102
ntdll.dll
10.0.18362.145
d3b10352
c0000005
00000000000a2e00
2d18
01d5274f83d1ec9b
C:\Program Files\Microsoft Office\Office16\MSACCESS.EXE
C:\WINDOWS\SYSTEM32\ntdll.dll
8651568e-d3a8-4b98-8613-fc3c3e2082d9
Ausgelöst wird der Absturz durch
CopyMemory AddrList, ByVal hHostent.h_addr_list, 4
bzw.
CopyMemory Address, ByVal AddrList, 16
Wenn ich es richtig verstanden habe, dann gibt die Ziffer am Ende der Zeile
die Anzahl der Daten an, die kopiert werden sollen.
Ich habe das mal so aus anderem Code, den ich im Internet gefunden habe,
übernommen.
Und wie bereits gesagt: Unter Access 32 bit funktioniert das ja auch.
Sage ich stattdessen
CopyMemory AddrList, ByVal hHostent.h_addr_list, 0
Läuft die Zeile ohne Absturz durch.
Der Wert von hHostent.h_addr_list wird dann aber nicht in AddrList kopiert.
Die Deklarationen sehen wie folgt aus:
Private Declare PtrSafe Function CopyMemory Lib "kernel32.dll" Alias
"RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As LongPtr)
As LongPtr
Private Type HOSTENT
h_name As LongPtr
h_aliases As LongPtr
h_addrtype As Integer
h_length As Integer
h_addr_list As LongPtr
End Type
Dim hHostent As HOSTENT
Dim AddrList As LongPtr
Dim Address As LongPtr
Vielleicht sehe ich ja wieder mal den Wald vor lauter Bäumen nicht.
Gruß
Jürgen