FindFirstPrinterChangeNotification/FindNextPrinterChangeNotification メソッドを使用して、C# から P/Invoke を使用してプリンターを監視しています。
この関数に関するMSDN ドキュメントをよく読みました。
FindNextPrinterChangeNotification への呼び出しの 1 つがゼロ以外 (成功) の戻り値になることがありますが、ppPrinterNotifyInfo ポインターは null です。この動作はどこにも文書化されていないため、これが何を示しているのかわかりません。通常、マシンで 20 枚または 30 枚のプリントを立て続けに送信することで、問題を再現できます。
FindFirstPrinterChangeNotification から受け取ったハンドルが有効であることはわかっています。これは、同じハンドルを使用する他の呼び出し (null ポインターを使用した呼び出しの前後の両方) が正常に通知データを正常に返すためです。
私が使用している定義は次のとおりです。
[DllImport("winspool.drv", EntryPoint = "FindNextPrinterChangeNotification", SetLastError = true,
CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
public static extern int FindNextPrinterChangeNotification([In] IntPtr hChangeObject,
[Out] out Int32 pdwChange,
[In, MarshalAs(UnmanagedType.LPStruct)] PrinterNotifyOptions pPrinterNotifyOptions,
[Out] out IntPtr lppPrinterNotifyInfo);
null ppPrinterNotifyInfo の原因は何ですか?この動作は、私が見逃している場所に文書化されていますか?それはどういう意味ですか?
null の場合を安全に無視して、同じハンドルから通知を受け取り続けることはできますか? 通知が届かないということですか?