Forum: Win32/Win64 API (native code)
Delphi
by Andreas2k,
14. Mär 2017
Vielen Dank,
ich glaube langsam verstehe ich die Problematik und es macht jetzt auch Sinn das ein Element von DriverInfo2 immer 24 Byte groß ist und somit das Array nicht funktioniert.
Ich werde es jetzt nach deinem Beispiel machen was für mich jetzt endlich Sinn ergibt :-D
Forum: Win32/Win64 API (native code)
Delphi
by Andreas2k,
13. Mär 2017
Ok, ich hab es jetzt wie in deinem ersten Beispiel gemacht.
Ist das mit pStart und FreeMem so in Ordnung?
function GetPrinterDrivers(): boolean;
var
Buffer : PDriverInfo2;
pStart : Pointer;
i : Integer;
BytesNeeded : DWORD;
Forum: Win32/Win64 API (native code)
Delphi
by Andreas2k,
13. Mär 2017
Dumme Frage aber kann ich es nicht auch einfach so machen:
statt 2x EnumPrinterDrivers aufzurufen rufe ich es 3x auf (1x um die nötige Buffersize zu ermitteln, 1x mit dem pBuffer in der Größe von BytesNeeded um den ItemsCount zu erhalten, 1x der finale aufruf mit dem @array (=SetLength(array, ItemsReturned))
function GetPrinterDrivers(): boolean;
var
aDriverList : array of...
Forum: Win32/Win64 API (native code)
Delphi
by Andreas2k,
10. Mär 2017
SizeOf(TDriverInfo2);
Hatte ich auch schon probiert ergibt bei mir aber 24 byte
pcbNeeded / 24 ergibt aber ( 10112 / 24 = 421 ) obwohl es halt nur 18 Treiber sind. Funktioniert also auch net.
Da ich bei mir ja weiß das ich 18 Treiber installiert habe ergibt sich bei mir ein Teiler von 10112 / 18 = 561 aber der Wert ist nicht überall gleich auf nem anderen Rechner muss der z.B. 429 sein....
Forum: Win32/Win64 API (native code)
Delphi
by Andreas2k,
10. Mär 2017
ich bin bisher immer noch nicht schlauer.
Der erste aufruf
EnumPrinterDrivers(nil, nil, 2, nil, 0, pcbNeeded, pcReturned)
liefert mir nur die benötigte größe in Byte - in meinem Fall sind das 10112 Byte (18 Treiber sind installiert)
mit SetLength(arDriverList, pcbNeeded); wird der Array 10112 Einträge groß - aber alles funktioniert.
Forum: Win32/Win64 API (native code)
Delphi
by Andreas2k,
6. Mär 2017
Das hatte mich anfangs auch gewundert aber der erste aufruf liefert ja nur die benötigten Bytes zurück und nicht die Anzahl Einträge. pcReturned liefert nach dem ersten Aufruf 0 zurück.
Mache ich also ein SetLength(arDriverList, pcReturned);
kommt beim zweiten / finalen aufruf die Fehlermeldung
Das war auch der Grund weshalb ich irtümlich Getmem benutzt habe. Ich bekomme einfach...
Forum: Win32/Win64 API (native code)
Delphi
by Andreas2k,
3. Mär 2017
Herzlichen Dank!
jetzt läuft wirklich rund.
Und danke für den Link :-D