質問

私は今、あまりにも長い道のりのためのシンプルな機能のように聞こえるものに取り組んできました。アイデアは私がツリービューを使用してアプリケーションを持っているということです。このツリービューは、多くのWindowsエクスプローラのように、ファイルやフォルダに整理するデータベースの内容を表しています。だから、ユーザーが自分のアプリケーションのうち、およびWindows Explorerにこれらのファイル/フォルダをドラッグすることができるはずという意味になります。

私は、彼らがフォルダをドラッグすると、彼らは、ファイルまたはIStreamをドラッグする場合、私はIStorageを使用することを決めました。非常に長い時間と私が今までのWin32 / COM(と、ここで非常に参考人からナッジ)について知りたいと思ったよりも方法の詳細を学んだ後、私は最終的にそのIStreamまたはIStorageが作成しています。

それから私は私がIStreamでそれを取得しなければならなかった、このIStorageを渡すか、またはWindowsエクスプローラにオフSTGMEDIUMすることを発見しました。もちろん、medium.tymedは、私が使用しているかに応じて、IStreamまたはIStorageのいずれかになりますが、私はそれを理解するようmedium.unionmemberIStream/IStorageへのポインタである必要があります。

私は、私は、(それはもちろん、blittable型ではありません)、私はバイト配列にブラスト事を変換しようとした固定キーワードを使用して試してみたが、それを実現するために方法を考え出すことはできませんそれ(それはまだblittable型ではない)、そして動作しませんでしたいくつかの他のものをピンにGCHandleを使用してみました」VEの。

Windowsエクスプローラが幸せになるとドロップを受け入れるように、私はIStorage sを移入ないか、考えるSTGMEDIUM mm.unionmember

だから私の質問はこれです?

役に立ちましたか?

解決

通常、C組合は、C#でStructLayout.Explicitを使用して表現されています。これはおそらく、しかし、あなたのケースでは動作しません - あなたがそのようなIStreamIStorage参照をオーバーレイすることができながら、マーシャラーは両方をマーシャリングしようとします。あなたの最善の策は、ちょうどIntPtrのあなたの宣言でSTGMEDIUMとしてフィールドを宣言し、それを初期化するためにMarshal.GetIUnknownForObjectを使用することが考えられます。

他のヒント

私は、トピックは、ファイルのドラッグを探して長い、しかし誰もが古くなっていると思うし、この議論をチェックアウトドロップとdbirdzの特にポスト:<のhref = "http://www.daniweb.com/forums/thread166429 .htmlを」REL = "nofollowを"> http://www.daniweb.com/forums/thread166429.html の

私の目には、これはでも、このアプリケーションに適用される、私はその場所に移動することができ、一時ファイルに私のストリームを書こうと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top