ターミナルサーバを介したCreateCompatibleBitmapを成功させるには?

解決


JJ  2003-04-23 23:43:09  No: 77808

はじめまして、JJと言います。

今、ターミナルサーバを使用したプログラムを作成しています。
VBで作成した画像をビットマップにしてエクセルに出力するプログラムなのですが、CreateCompatibleBitmapを使用して領域を確保しようとすると、エラーになってしまいます。GetLastErrorで取得したエラー内容は以下のとおりです。

エラー番号:8
メッセージ:このコマンドを実行するのに十分な記憶域がありません

この現象は、ターミナルサーバを使用した場合だけおきます。

1.ターミナルサーバを使用していないマシン
    問題なく動作します

2.ターミナルサーバをインストールしたマシン
    上記のエラーが必ず発生します

3.ターミナルサーバに対してクライアントで接続したとき
    エラーが発生します
    ただし、クライアントを起動させるときに800x600の解像度で実行すると、問題なく    動作します
    (ターゲットマシンは1024x768です)

また、2,3の場合でも、CreateCompatibleBitmapのパラメータの横幅、縦幅を小さくすれば、動作します。
しかし、2倍のメモリを積んだマシンをサーバにしても、エラーは発生しました。

以下がプログラムです。

    lngWidth = ScaleX(CNST_LAYOUT_WIDTH, vbTwips, vbPixels)
    lngHeight = ScaleY(CNST_LAYOUT_HEIGHT, vbTwips, vbPixels)
    
    lngMemDC = CreateCompatibleDC(GetDC(0))

    If lngMemDC = 0 Then
        MsgBox PRINT_MSG_ERR_CREATEDC
        Exit Function
    End If
    
    lngNewBitmap = CreateCompatibleBitmap(GetDC(0), lngWidth, lngHeight)
    'ここでエラーが発生します

    If lngNewBitmap = 0 Then
        Call DeleteObject(lngMemDC)
        MsgBox PRINT_MSG_ERR_CREATEBITMAP
        Exit Function
    End If
    
    lngOldBitmap = SelectObject(lngMemDC, lngNewBitmap)

どなたか、よいアドバイスはございませんでしょうか?


pb  2003-04-29 10:22:23  No: 77809

マイクロソフト サポート技術情報 - 418944(ターミナル サービスを使用する際の制限)のものではないでしょうか?

以前私も、印刷系のプログラムにて似たような現象を体験したことがあります。GDI系は、実装メモリ容量が大きくても
制限があるようです。


JJ  2003-04-30 18:12:07  No: 77810

pb様、情報ありがとうございます。
早速確認してみました。
結局、解像度を落とすなどの対応をしないとだめなんですね。

う〜ん、困りました。

なんとかほかの方法を考えます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加