[リストへもどる]
一括表示

投稿時間:2003/04/23(Wed) 14:40
投稿者名:JJ
Eメール:
URL :
タイトル:
ターミナルサーバを介したCreateCompatibleBitmap
はじめまして、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)


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

投稿時間:2003/05/06(Tue) 10:09
投稿者名:JJ
URL :
タイトル:
Re: ターミナルサーバを介したCreateCompatibleBitmap
自己解決しました。

結局、WTSでは1セッションあたり16MBしか使用できない使用になっているそうです。
今回は画像をカラーではなく白黒で印刷したいので、CreateCompatibleBitmapで
ディスプレイを指定していたのをCreateCompatibleDCで作成したDCを指定することで
白黒の画像を作成することで対処できました。

お騒がせいたしました。