none
WindowsAPI-Funktion DocumentProperties erzeugt Fehler beim Kompilieren

    Frage

  • Hallo,

    ich möchte gerne einen Drucker einstellen und benutze dafür die WindowsAPI-Funktion DocumentProperties. Unter 32bit funktionierte die Funktion tadellos. Nun habe ich anhand der Windows-Dokumentation für WindowsAPI-Funktionen für 64bit die Konstanten und die Typen sowie die Deklaration angepasst. Leider bringt die Codezeile DocumentProperties(0, hPrinter, sPrinterName, 0, 0, 0) zur Feststellung der Speichergröße immer die Fehlermeldung, dass der Argumenttyp ByRef unverträglich sei. Dies bezieht sich auf die zweite 0 in den Argumenten. Im Netz finde ich leider keinerlei Hinweise auf eine Lösung.

    Kann es sein, dass die Dokumentation der API-Funktion fehlerhaft ist?

    Gruß

    compinaut

    Mittwoch, 3. Januar 2018 14:33

Alle Antworten

  • Hallo compinaut,

    Entwickelst Du eine Win32-Anwendung oder eine MFC-Anwendung? Ändert sich etwas, wenn Du NULL anstatt 0 als Parameter übergibst? NULL kann entweder als 0 oder als 0L definiert werden. Sieh Dir dazu die letzte Antwort in folgendem Thread an:
    Why Visual Studio allows NULL as pure virtual function specifier?


    Leider bringt die Codezeile DocumentProperties(0, hPrinter, sPrinterName, 0, 0, 0) zur Feststellung der Speichergröße immer die Fehlermeldung, dass der Argumenttyp ByRef unverträglich sei.

    Wie lautet der genaue Text der Fehlermeldung? Im Hinblick auf ByRef stellt sich die Frage, ob Du ein Makro für Excel oder Word entwickelst.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 4. Januar 2018 14:27
    Moderator
  • Hallo,

    vielen Dank für die Antwort.

    Ich bin schon ein bisschen weiter gekommen. Ich möchte gerne über ein Word-Makro einen Duplex-Druck auf einem Kopierer anstoßen. Mit Word 2000 ging dies mit der von Microsoft bereitgestellten Funktion "SetPrinterDuplex()" problemlos. Nun haben wir auf Word 2016 umgestellt und die Funktion gab die Fehlermeldung aus.

    Ich habe nun mit Hilfe eines Artikels von Microsoft die ersten zwei Nullen durch eine Variable mit dem Typ DevMode ersetzt. Nun kam die genannte Fehlermeldung nicht mehr.

    Aber als nächste Fehlermeldung kommt nun "Typen unverträglich" in der Zeile

    pinfo.pDevmode = VarPtr(yDevModeData(0))

    pinfo.pDevmode erwartet wohl einen Zeiger auf die Variable vom Typ DevMode. Dies bekomme ich aber nicht hin auch wenn ich die Zeile in

    pinfo.pDevmode = VarPtr(dm)  (dm = eine Variable vom Typ DevMode, die auch in den vorherigen Aufrufen benutzt wird)

    ändere.

    Gruß

    compinaut


    • Bearbeitet compinaut Donnerstag, 4. Januar 2018 14:56
    Donnerstag, 4. Januar 2018 14:54