はじめまして、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)
どなたか、よいアドバイスはございませんでしょうか?
マイクロソフト サポート技術情報 - 418944(ターミナル サービスを使用する際の制限)のものではないでしょうか?
以前私も、印刷系のプログラムにて似たような現象を体験したことがあります。GDI系は、実装メモリ容量が大きくても
制限があるようです。
pb様、情報ありがとうございます。
早速確認してみました。
結局、解像度を落とすなどの対応をしないとだめなんですね。
う〜ん、困りました。
なんとかほかの方法を考えます。
ツイート | ![]() |