次のBitBlt
P/Invoke 宣言を使用します。
[DllImport("gdi32.dll")]
static extern int BitBlt(IntPtr hdc, int nXDest, int nYDest, int nWidth,
int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);
そして、次の呼び出しコード:
if (0 == BitBlt(hdc1, 0, 0, 856, 2246, hdc2, 0, 0, (uint)RasterOpMode.SRCCOPY))
{
var lastError = Marshal.GetLastWin32Error();
...
}
BitBlt()
ofから結果を得ていますが、 of0
も得ています。lastError
0
の戻り値のドキュメントBitBlt
は次のとおりです。
関数が失敗した場合、戻り値はゼロです。拡張エラー情報を取得するには、 を呼び出します
GetLastError
。
もちろん、マネージ コードから を呼び出しMarshal.GetLastWin32Error()
ますよね?そのため、MSDN ドキュメントの下部にあるコミュニティを支持しています。BitBlt()
代わりに返すように定義しようとしましbool
たが、同じように動作します。
この同じコードは、Visual Studio 開発 Web サーバーを介してデバッグする場合、2 つの独立した開発者のマシンで正常に動作しますが、IIS サーバーでは失敗します。コードと渡されたパラメーターと戻り値の正確な状況を確認するために、リモート デバッグを行っています。
の直後の呼び出しでも 0 が返される (エラーがないことを示す) のに、(エラーを示す) がBitBlt
返されるのはなぜですか?0
Marshal.GetLastWin32Error()
それらはすべて 64 ビットの Windows 7/2008 マシンです。IIS を 32 ビット モードで実行しています。
ありがとう!