Gong-wpf-dragdrop: アプリケーションの2つのインスタンス間でデータをドラッグすると、無効なtymed(HRESULTからの例外:0x80040069(DV_E_TYMED))例外が発生します

作成日 2013年02月18日  ·  3コメント  ·  ソース: punker76/gong-wpf-dragdrop

_原作者:cheaster ... @ gmail.com(2010年12月7日14:58:50)_

どの手順で問題が再現されますか?

  1. IDragSourceを実装します。
  2. データのドラッグを開始します(私の場合はwpf datagridからの行)
  3. StartDragのIDragInfo.Dataオブジェクトにユーザー定義データのクローンを追加します。
  4. アプリケーションの2番目のインスタンスで同じデータグリッド上にドラッグします。

期待される出力は何ですか?

期待される出力は、データグリッドに追加されたクローンデータです。 DragOverイベントとDropイベントでは、データの問題を処理します。 ただし、GongSolutions.Wpf.DragDrop.DropInfo.cs(コードはData =(e。 Data.GetDataPresent(dataFormat))?e.Data.GetData(dataFormat):e.Data;)。

どのバージョンの製品を使用していますか?
0.1.3(アセンブリバージョン)-ソースからビルドしました
Windows XP

以下に追加情報を入力してください。

例外の詳細は次のとおりです。

System.Runtime.InteropServices.COMExceptionがユーザーコードによって処理されませんでした
メッセージ=無効なtymed(HRESULTからの例外:0x80040069(DV_E_TYMED))
ソース= mscorlib
ErrorCode = -2147221399
スタックトレース:
System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode、IntPtr errorInfo)で
System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode)で
System.Windows.DataObject.System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC&formatetc、STGMEDIUM&medium)で
System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC&format、STGMEDIUM&medium)で
System.Windows.DataObject.OleConverter.GetDataInner(FORMATETC&formatetc、STGMEDIUM&medium)で
System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL(文字列形式、DVASPECTアスペクト、Int32インデックス)
System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject(文字列形式、DVASPECTアスペクト、Int32インデックス)で
System.Windows.DataObject.OleConverter.GetData(文字列形式、ブールautoConvert、DVASPECTアスペクト、Int32インデックス)
System.Windows.DataObject.OleConverter.GetData(String format、Boolean autoConvert)で
System.Windows.DataObject.GetData(String format、Boolean autoConvert)で
System.Windows.DataObject.GetData(String format)で
GongSolutions.Wpf.DragDrop.DropInfo..ctor(オブジェクト送信者、DragEventArgs e、DragInfo dragInfo)で
GongSolutions.Wpf.DragDrop.DragDrop.DropTarget_PreviewDragOver(オブジェクト送信者、DragEventArgs e)で
GongSolutions.Wpf.DragDrop.DragDrop.DropTarget_PreviewDragEnter(オブジェクト送信者、DragEventArgs e)で
System.Windows.DragEventArgs.InvokeEventHandler(Delegate genericHandler、Object genericTarget)で
System.Windows.RoutedEventArgs.InvokeHandler(デリゲートハンドラー、オブジェクトターゲット)で
System.Windows.RoutedEventHandlerInfo.InvokeHandler(オブジェクトターゲット、RoutedEventArgs routedEventArgs)で
System.Windows.EventRoute.InvokeHandlersImpl(Object source、RoutedEventArgs args、Boolean reRaised)で
System.Windows.UIElement.RaiseEventImpl(DependencyObject sender、RoutedEventArgs args)で
System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)で
System.Windows.OleDropTarget.RaiseDragEvent(RoutedEvent dragEvent、Int32 dragDropKeyStates、Int32&effects、DependencyObject target、Point targetPoint)で
System.Windows.OleDropTarget.MS.Win32.UnsafeNativeMethods.IOleDropTarget.OleDragOver(Int32 dragDropKeyStates、Int64ポイント、Int32&エフェクト)で
InnerException:

_元の問題: http ://code.google.com/p/gong-wpf-dragdrop/issues/detail?id = 29_

Bug Imported from google code

最も参考になるコメント

開発中のアプリでDV_E_TYMED例外の問題に直面しました。見つけた解決策を共有したいと思います。 ここに添付されているのは、問題を修正するために変更したプロジェクトのファイルです。
基本的に、あるアプリケーションから別のアプリケーションにオブジェクトをドラッグするときは、COMを使用する必要があり、COMでは、オブジェクトを正しく交換するためにシリアル化可能である必要があります。
DataObjectを使用する場合、作成したDataFromatを渡すことはできません。COMはそれについて何も認識しません。 代わりに、[Serializable]としてマークされ、ISerializableを実装するラッパークラス(DragDropDataWrapper)を作成しました。 次に、DataObjectを作成する必要があるたびに、new DataObject(new DragDropDataWrapper(data))を実行します。 ドロップ側では、COMで認識可能なDataFormat.Serializableを使用してデータを取得できるようになりました。
サンプルを機能させるために、他のマイナーなことを修正する必要がありました。つまり、DragInfoがnullの場合を管理します。
BoundTreeの例を確認すると、クロスアプリケーションで機能するはずです。
CrossApplicationDragDropFix.zip

全てのコメント3件

_cheasterから... @ gmail.com、2010年12月7日15:25:00_
もう少し情報...

本当の問題は、IDragInfo.DataをSystem.Windows.DataObjectオブジェクトに設定したときのようです。 問題をデモするためのサンプルアプリケーションを添付しています。

エラーを確認するには、次の手順を実行します。 アプリケーションの2つのインスタンスを実行し、2つのインスタンス間でリストボックスからアイテムをドラッグしてみます。

DataObjectを使用している理由は、O / Sへのファイルドロップも許可する必要があるためです。

_ 2011年8月24日のfahad ... @ gmail.comから20:46:51_
この問題についてここにあなたの声を追加してください
https://connect.microsoft.com/WPF/feedback/details/682826/comexception-of-type-dv-e-tymed-occurs-when-a-break-point-hit-as-a-result-of-ドラッグ

開発中のアプリでDV_E_TYMED例外の問題に直面しました。見つけた解決策を共有したいと思います。 ここに添付されているのは、問題を修正するために変更したプロジェクトのファイルです。
基本的に、あるアプリケーションから別のアプリケーションにオブジェクトをドラッグするときは、COMを使用する必要があり、COMでは、オブジェクトを正しく交換するためにシリアル化可能である必要があります。
DataObjectを使用する場合、作成したDataFromatを渡すことはできません。COMはそれについて何も認識しません。 代わりに、[Serializable]としてマークされ、ISerializableを実装するラッパークラス(DragDropDataWrapper)を作成しました。 次に、DataObjectを作成する必要があるたびに、new DataObject(new DragDropDataWrapper(data))を実行します。 ドロップ側では、COMで認識可能なDataFormat.Serializableを使用してデータを取得できるようになりました。
サンプルを機能させるために、他のマイナーなことを修正する必要がありました。つまり、DragInfoがnullの場合を管理します。
BoundTreeの例を確認すると、クロスアプリケーションで機能するはずです。
CrossApplicationDragDropFix.zip

このページは役に立ちましたか?
0 / 5 - 0 評価