Ground0 hat geschrieben:Ich weiss nur dass es Total 32 Bytes sein müssen ... aber es kommt immer folgendes zurück im Error:234
MSDN:
ERROR_MORE_DATA
234
0xEA
More data is available.
Der Fehler kommt weil Du Size vorher nicht auf die Größe der
Structure setzt, die Du übergibst.
Size ist ein [in/out] Parameter:
in = Größe der Struktur die Du übergibst
out = Größe die erforderlich ist
Scheint ein Fehler in der Dokumentation von Microsoft zu sein.
Ist aber auch logisch, denn woher soll WinAPI sonst wissen wie
groß die übergebene Struktur ist? Diese Info kann es nur durch
den Parameter lpdwSize bekommen, nicht anders.
Ein sehr schlimmer Fehler in der Doku, nicht einfach...
Die Struktur wird mit 8 gepackt, d.h. sie wird automatisch aufgefüllt
bis sie eine Größe hat die durch 8 teilbar ist. PB macht das halt nicht,
die anderen Compiler aber.

Die Struktur sollte also in PureBasic so aussehen:
Code: Alles auswählen
Structure TAPE_GET_MEDIA_PARAMETERS
Capacity.LARGE_INTEGER
Remaining.LARGE_INTEGER
BlockSize.l
PartitionCount.l
WriteProtected.b
__fill.b[7]
EndStructure
Möchtest Du in Deiner Procedure Quads direkt zurückgeben, dann
solltest Du aber auch die LARGE_INTEGER zu Quads machen:
Code: Alles auswählen
Procedure.q Tape_GetFreeSpace(hTape.l) ;Final
Structure TAPE_GET_MEDIA_PARAMETERS
Capacity.q
Remaining.q
BlockSize.l
PartitionCount.l
WriteProtected.b
__fill.b[7]
EndStructure
Global Parameter.TAPE_GET_MEDIA_PARAMETERS, Size.l, Error.l
Size = sizeOf(TAPE_GET_MEDIA_PARAMETERS)
Error.l = GetTapeParameters_(hTape.l, 0, @Size.l, @Parameter)
;Error.l = GetLastError_()
If Error.l <> 0
ProcedureReturn 0
Else
ProcedureReturn Parameter\Remaining
EndIf
EndProcedure
Hoffe das hilft...
