Hallo,
ich habe folgende Funktion
Declare Function LlGetPrinterFromPrinterFile Lib "CMLL13.DLL" Alias _
"_LlGetPrinterFromPrinterFileA@32"
(ByVal hJob As Long,
ByVal nObjType As Long,
ByVal pszObjectName As String,
ByVal nPrinter As Long,
ByVal pszPrinter As String,
pnPrinterBufSize As Long,
pDevMode As DEVMODE,
pnDevModeBufSize As Long)
As Long Ich habe Probleme mit den letzten beiden Parametern pDevMode
und pnDevModeBufSize. Die Dokumentation sagt zu den
beiden folgendes:
pDM: Zeiger auf einen Puffer, in dem die DEVMODE-Struktur des Druckers abgelegt
wird. Wenn pDM NULL ist und pnSizeDm nicht NULL ist, wird die Größe des
benötigten Platzes in *pnSizeDm gespeichert. pnSizeDm: Puffergröße des Bereichs, auf den pDM zeigt Die DEVMODE-Struktur ist wie folgt aufgebaut:
Type DEVMODE
dmDeviceName As String * 32
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * 32
dmUnusedPadding As Integer
dmBitsPerPel As Long ' Basic Win32 definition had an error here!
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type So, genug des Vorgeplänkels. Nun zu meinem Problem!
Ich möchte gerne einen NULL-Wert beim pDevMode Parameter
übergeben. Aber alle mir bisher bekannten Methoden haben
nicht Funktioniert. Wenn ich vbNull, Nothing,
0& übergebe bekomme ich beim Kompilieren folgende
Fehlermeldung:
Argumenttyp ByRef unverträglich. Danach habe ich versucht einer DEVMODE-Variablen NULL zuzuweisen.
Das funktioniert aber leider auch nicht.
Wenn ich der DEVMODE-Variable nicht NULL zuweisen wollte, muss ich
wie in der Dokumentation beschrieben, die Größe dieser Buffer-Variablen
im Parameter pnDevModeBufSize übergeben. Die Größe in Byte ermittele ich mit
der Len()-Funktion.
Dim pDMBuffer as DEVMODE
Dim pDMBufferSize as Long
pDMBufferSize = Len(pDMBuffer) Leider bekomme ich, wenn ich dieses Vorgehen wähle, die Meldung von
der Funktion, dass eine Buffervariable zu klein ist um die ermittelten
Daten in diese zu übergeben.
Da die DEVMODE-Variable nicht übergeben werden muss würde ich gerne
einen NULL-Wert übergeben. Das bekomme ich aber nicht hin.
Kann mir jemand weiter helfen?
MfG,
TtT
PS: Weit ausgeholt für ein einfaches Problem . |