A. R. schrieb:
> DWORD read=sizeof(test);
> LPDWORD written;
soso.
written ist also ein Pointer, der auf einen DWORD zeigt.
Kurze Frage: Wo ist denn dieser DWORD?
> WritePrinter(meinPrinter, Buffer, read, written);
Tja. Und dann wird wahrscheinlich WritePrinter die Anzahl geschriebener
Bytes im DWORD hinterlassen wollen, deren Adresse du in written
übergibst. Nur: written ist ein Pointer und zeigt als slcher auf keinen
DWORD. Es zeigt irgendwohin. Wo genau, wissen nur die Götter.
Nicht alles, was in einer Funktions-Argumentliste als Pointer deklariert
ist, heisst für dich automatisch, dass du auch eine Pointer Variable
dafür brauchst. Du Funktion will an dieser Stelle oft einfach nur die
Adresse einer Variablen haben, in die sie schreiben darf.
DWORD written;
WritePrinter(meinPrinter, Buffer, read, &written);
> Dann wollte ich noch allgemein fragen, ob dies die adäquate Methode ist,
> um in C++ längere Texte(z.B. per Dialog geöffnete Textdateien mit
> mehreren Seiten Text) zum Drucker zu senden?
Nein.
Liegt vor allen Dingen daran, dass WritePrinter die falsche Methode
dafür ist.
Für dein Programm gibt es keinen Unterschied ob du in ein Fenster oder
zum Drucker hin ausgibst. Beides wird über einen Device-Kontext
dargestellt auf den ganz normal ausgegeben wird.
> beachten (cxClient, cyClient)...nicht dass ich mir zu viel Arbeit mache
> und es gibt eine viel elegantere Methode?!?
Normalerweise hat ja ein Windows-Programm irgendwo eine Draw-Funktion,
die den Inhalt des Documents in einen DC abbildet. Anstelle des DC, den
man normalerweise bei einer WM_PAINT Nachricht bekommt, benutzt man dann
einfach den DC den man von den Druckerfunktionen bekommt und schon malt
dieselbe Routine nicht mehr in ein Fenster sondern auf den Drucker. OK,
den DruckerDC muss man meist noch etwas anpassen, weil ein Drucker ja
höhere Auflösungen hat, als ein Monitor, aber ansonsten ist das meiste
einfach nur eine Frage der Organisation dieser Zeichenroutine.