くだすれ.NET(超初心者向け)at TECH
くだすれ.NET(超初心者向け) - 暇つぶし2ch239:デフォルトの名無しさん
08/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を設定して開いてあります。

コールバックデリゲートを呼び出すには何か他の操作が必要なのでしょうか?


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch