- 239 名前:デフォルトの名無しさん [2008/01/28(月) 23:56:45 ]
- Win32APIまじりの質問になって申しわけありません。
現在C++/CLIを使用して.NETからWin32APIでの非同期IOを行っています。 非同期IOの完了通知にSystem.Threading.Overlappedクラスを使っています。 非同期での書き込みは完了し、待機イベントもシグナルを受信するのですが、 Overlapped.Packメソッドに渡したコールバックデリゲートが呼ばれなくて困っています。 1 Overlappedをインスタンス化する。(hEventは手動リセットイベントオブジェクト asyncはIAsyncResultを実装したクラス Overlapped ^ overlapped = gcnew Overlapped(0 , 0 , IntPtr(hEvent) , async); 2 Packする。 NativeOverlapped * nativeOverlapped = overlapped->Pack(callback , buffer); 3 非同期IOを行う WriteFile(hIO ,Marshal::UnsafeAddrOfPinnedArrayElement(buffer,0).ToPointer() , buffer->Length , NULL , (LPOVERLAPPED)nativeOverlapped); 4 完了通知を受け取った(hEventがシグナルを受信)あとにリソースを開放する Overlapped ^ overlapped = Overlapped::Unpack(nativeOverlapped); Overlapped::Free(nativeOverlapped); で間違いありませんよね? hIOはFILE_FLAG_OVERLAPPEDを設定して開いてあります。 コールバックデリゲートを呼び出すには何か他の操作が必要なのでしょうか?
|

|