タイトル : Re: CreateDCの引数について 投稿日 : 2008/08/20(Wed) 10:50 投稿者 : 魔界の仮面弁士
すでに花ちゃんさんの回答が付いているので、私からは > 使用方法など間違っていますか? の点について。 > Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" _ > (ByVal lpDriverName As String, ByVal lpDeviceName As String, _ > ByVal lpOutput As Long, ByVal lpInitData As Long) As Long CreateDC API は、以下のように定義されています。 ---------------------------------------------------------------------- HDC CreateDC( LPCTSTR lpszDriver, // ドライバ名 LPCTSTR lpszDevice, // デバイス名 LPCTSTR lpszOutput, // 未使用(NULL 固定) CONST DEVMODE* lpInitData // プリンタドライバデータ(任意指定) ); ---------------------------------------------------------------------- VB の場合、最後の引数について、いろいろな指定方法がありますが、用途に応じて ByRef Any … 任意データ(融通が利くが、データ型を意識せねばならない) ByVal Long … アドレス指定(NULL 指定に便利だが、データ指定時には VarPtr 関数の併用が必要) ByRef DEVMODE … ユーザー定義型を渡す場合(NULL 参照を渡せないという制限あり) ByRef Byte … バイナリデータとして渡す場合(Byte配列の先頭要素を参照渡しする/NULL 参照は渡せない) などがよく利用されています。 その意味では、Declare 宣言そのものに問題はありません。 > CreateDC("AAAA", vbNullString, 0, 0) しかし、これは問題です。 (1) 第一引数の "AAAA" が意味を為しているでしょうか。第一引数には、 プリンタ名 (もしくは、vbNullString / "WINSPOOL" / "DISPLAY" )で なければなりませんが、"AAAA" というプリンタが本当にあるのでしょうか? (2) 画面への描画の場合には、第二引数に(ByVal の)vbNullString を指定する事も ありますが、プリンタへの出力目的であれば、第二引数も指定する必要があります。 (3) 第四引数に、0 を渡してはいけません。ByRef Any に対して 0 を指定すると、 「NULL 参照」を指定しているのではなく、「0 という 16bit整数値への参照」に なってしまいます。NULL 参照を渡したいなら、ByVal 0& とせねばなりません。 |