DOBON.NET DOBON.NETプログラミング掲示板過去ログ

画面に描画しようとするとメモリーエラーが起こる

分類:[.NET]

Win32.APIとGDI+を使って画面に描画しようとしているのですが、「メモリーが不足しています」と表示されます。
タスクマネージャで確認したところそんなにメモリーを使っていませんでした。
何処が間違っているのでしょうか?

[DllImport("Gdi32.dll",EntryPoint="CreateDC")]
private static extern IntPtr CreateDC(string Display,string c,object b,object a);
[DllImport("Gdi32.dll",EntryPoint="DeleteDC")]
private static extern bool DeleteDC(IntPtr handle);

private void StartView(){
int i = 0;
a = CreateDC("DISPLAY","DISPLAY",null,null);
Graphics g = System.Drawing.Graphics.FromHwnd(a);//ここでエラー
(中略)
g.Dispose();
}
private void DeleteView(){DeleteDC(a);}
> Win32.APIとGDI+を使って画面に描画しようとしているのですが、「メモリーが不足しています」と表示されます。

ここで表示されているメモリー不足はリソース不足の意味ではないでしょうか?
だとすれば後始末が正しく行われていないのだと思います。
提示のコードのクラスのインスタンスで
StartViewメソッドとDeleteViewメソッドを必ず対で使用していますか?

> a = CreateDC("DISPLAY","DISPLAY",null,null);
> Graphics g = System.Drawing.Graphics.FromHwnd(a);//ここでエラー

CreateDCで得ているのはDCですから、
Graphics.FromHDCを使わないといけないと思いますが、
FromHwndになっていますから、これだと不正なハンドルを指定しているのでは?

DOBON.NET | プログラミング道 | プログラミング掲示板