tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDeviceCapabilities?
記事No3484
投稿日: 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がひっかかるかもと書い
てあり
ましたが、どのようにすれば用紙サイズを取得できるのでしょうか?よろしくご教授ください。

[ツリー表示へ]