5

私はあまりにも長い間、単純な機能のように聞こえるものに取り組んできました。アイデアは、私は TreeView を持つアプリケーションを持っているということです。このツリービューは、Windows エクスプローラーと同様に、ファイルとフォルダーに編成されたデータベースの内容を表します。したがって、ユーザーがこれらのファイル/フォルダーをアプリから Windows エクスプローラーにドラッグできるようにすることは理にかなっています。

IStreamファイルをドラッグする場合は を使用するかIStorage、フォルダーをドラッグする場合は を使用することにしました。非常に長い時間をかけて、Win32/COM について知りたいと思っていた以上のことを学んだ後 (そして、ここで非常に親切な人からの助言を受けて)、ついにそれを手に入れた、IStreamまたはIStorage作成しました。

次に、これを Windows エクスプローラーに渡しIStreamたり、オフにしたりするには、 . もちろん、 medium.tymed は、どちらを使用しているかに応じて または になりますが、私が理解しているように、は へのポインターでなければなりません。IStorageSTGMEDIUMIStreamIStoragemedium.unionmemberIStream/IStorage

私は固定されたキーワードを使用してみました(もちろん、それはblittableではありません)、爆破されたものをバイト配列に変換しようとしましたが、それを実現する方法を思いつくことができませんでした。 GCHandle を使用して固定する (ただし、まだ blittable ではありません)、および機能しなかった他のいくつかのこと。

私の質問は次のとおりです: と が与えられIStorage sた場合、Windows エクスプローラーが満足してドロップを受け入れるようにするSTGMEDIUM mにはどうすればよいですか?m.unionmember

4

2 に答える 2

2

通常、C 共用体はStructLayout.ExplicitC# で使用して表されます。ただし、これはおそらくあなたの場合には機能しません-そのようなオーバーレイIStreamIStorage参照はできますが、マーシャラーは両方をマーシャリングしようとします。あなたの最善の策は、おそらく の宣言のようにフィールドをIntPtr宣言しSTGMEDIUM、 を使用Marshal.GetIUnknownForObjectして初期化することです。

于 2009-08-14T21:32:15.020 に答える
0

このトピックは時代遅れだと思いますが、ファイルのドラッグ アンド ドロップを探している人は、このディスカッション、特に dbirdz の投稿をチェックしてください: http://www.daniweb.com/forums/thread166429.html

私の目には、これはこのアプリケーションにも当てはまります。ストリームを一時ファイルに書き込んで、その場所に移動できるようにします。

于 2011-01-04T16:13:52.753 に答える