タイトル : DeviceCapabilities? 投稿日 : 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がひっかかるかもと書い てあり ましたが、どのようにすれば用紙サイズを取得できるのでしょうか?よろしくご教授ください。 |