0

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 の場合を安全に無視して、同じハンドルから通知を受け取り続けることはできますか? 通知が届かないということですか?

4

0 に答える 0