掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
hDCに関するエラーを治すには? (ID:86416)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
GDI+ は、GDI を機能強化して、グラフィカルイメージをオブジェクトとして扱えるように 設計された物であり、コーディングが全く異なります。そのため、単純な置き換えはできません。 > 具体的に、GDI+のGraphics クラスを使いたい場合は、 VC++.NET(Managed C++) と VB.NET の組み合わせにすれば、 Graphicsクラスをそのまま扱えますよ。 もし、C++側が GDI の hDC を取り扱うようになっているのであれば、 Graphics.FromHdc メソッドを使って、hDC から Graphics オブジェクトを生成したり、 Graphics.GetHdc/ReleaseHdc メソッドにて、逆に hDC を取り出す事もできます。 > VC、VBにどのような記述が必要になるのでしょうか? GDI では、GDI32.DLL や User32.dll が公開する関数群(たとえば、DrawText等)を使いますが、 GDI+では、GDIPlus.dll が公開する関数群(たとえば、GdipDrawString等)を使う事になります。 VB6であろうと、VC++6であろうと、必要になる関数は同じです。 ただ、.NET においては、GDI+ の操作を容易にするために、GDI+ のAPI関数などが Graphicsクラスとしてカプセル化されているため、より扱いやすくなっています。 たとえば VB.NET から、P/Invoke (API 呼び出し) にて GdipDrawString APIを呼ぶ事も 可能ですが、それは System.Drawing.Graphicsクラスの DrawStringメソッドで代用できるわけです。 > また、蛇足のような質問かもしれませんが、GDI+のGraphics Classと > GDIのhDCには速度の差なんていうものはあるのでしょうか? # デバイスコンテキストではなく、デバイスコンテキストハンドルと比べるのですか…?(^_^;) とりあえず、GDI と GDI+ は、できる事にも差がありますので、単純な比較はできません。 たとえば、GDIではαチャネルを取り扱えませんし。 ただ、ビットマップの単純な転送速度を比べるなら、GDI の方が圧倒的に早いです。 http://lamoo.s53.xrea.com/develop/gdiplus/gdiplus_blt.html > Public Declare Sub Drawing Lib "dynamic.dll" (ByVal hDC&, ByVal settingData!) > Private Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hWnd As Integer) As Integer 宣言が間違っているようです。 hDC や hWnd は、IntPtr型で宣言するのが一般的です。 中には、整数型で宣言する人も居ますが、その場合は Long型(System.Int64)ではなく、 Integer型 (System.Int32)を使う必要があります。(少なくとも、Win32環境においては) > データと同じ場所にdynamic.dllを置いているのですが、 「データ」とは、具体的には何の事でしょうか。 もしかして、ソースコードと同じフォルダに置いていませんか? Visual Studio.NETでは、exeはbinフォルダの下に作られますので、 開発環境で dll を利用する場合は、配置位置に注意してください。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.