タイトル | : DeviceCapabilities? |
記事No | : 3484 |
投稿日 | : 2006/04/11(Tue) 15:56 |
投稿者 | : ヒロポン |
[OSのVer]:Windows2000 [VBのVer]:VB.NET2002
こんにちは。はじめまして。現在私はVB.NET2002とCrystalreportでWindowsアプリを作成している のです が、カスタム用紙サイズの印刷で、配布元のPCではうまく出力されるのですが、配布先のPCでは A4にな ってしまうという状態で悩んでいます。ネットでいろいろ調べた結果、DeviceCapabilitiesというAPI が必要 ということと、こちらのサイトの過去ログに行き着きました。早速参考にさせていただいたのですが 、エラー がでてしまいます。下記がその部分のコードです。
Declare Function DeviceCapabilities Lib "winspool.drv" Alias "DeviceCapabili tiesA" ( _ ByVal pDevice As String, _ ByVal pPort As String, _ ByVal fwCapability As Short, _ <System.Runtime.InteropServices.OutAttribute()> ByVal pOutput() As String, _ ByVal pDevMode As IntPtr) As Integer
Declare Function DeviceCapabilitiesName Lib "winspool.drv" Alias "Device CapabilitiesA" ( _ ByVal pDevice As String, _ ByVal pPort As String, _ ByVal fwCapability As Short, _ <System.Runtime.InteropServices.OutAttribute()> ByVal pOutput(,) As Byte, _ ByVal pDevMode As IntPtr) As Integer
Public Sub SetPaperBinComboBox(ByVal strPrinterName As String)
Dim lngIdx As Long Dim lngBinsCount As Long Dim strBinNameBuff() As Byte Dim x As String Dim intBins() As String Dim strBinName As String Dim lngInitPos As Long Dim strRowSource As String
lngBinsCount = DeviceCapabilities(strPrinterName, Nothing, _ DC_PAPERS, Nothing, _ System.IntPtr.Zero)
Dim BufSize As Integer = (lngBinsCount * 64) '少し多めに Dim strBuf As String = New String(CChar(" "), BufSize) 'バッファを確保 Dim bytBinNameBuff(64, lngBinsCount - 1) As Byte ReDim intBins(lngBinsCount - 1)
Call DeviceCapabilities(strPrinterName, Nothing, _ DC_PAPERS, intBins, _ System.IntPtr.Zero)
Call DeviceCapabilitiesName(strPrinterName, Nothing, _ DC_PAPERNAMES, bytBinNameBuff, _ System.IntPtr.Zero)
For i = 0 To BufSize - 64 Step 64 '64バイト毎に取得して、NullChar を取り除く Dim strTmp As String = strBuf.Substring(i, 64).TrimEnd(ControlChars.NullChar) ComboBox3.Items.Add(strTmp) Next i
ほとんどこちらの過去ログ丸写しで申し訳ないのですが、初心者なもので1回うまくいけば、自分な りにいじ れるようになるかなと参考にさせていただきました。
Call DeviceCapabilities(strPrinterName, Nothing, _ DC_PAPERS, intBins, _ System.IntPtr.Zero)
の部分でエラー オブジェクト参照がオブジェクト インスタンスに設定されていません。 System.NullReferenceExceptionになってしまいます。過去ログではNothingがひっかかるかもと書い てあり ましたが、どのようにすれば用紙サイズを取得できるのでしょうか?よろしくご教授ください。
|