Gong-wpf-dragdrop: ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‘ ์ธ์Šคํ„ด์Šค๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ๋ฉด ์ž˜๋ชป๋œ ์œ ํ˜• (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. ๋‘ ๋ฒˆ์งธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ์Šคํ„ด์Šค์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๊ทธ๋ฆฌ๋“œ ์œ„๋กœ ๋“œ๋ž˜๊ทธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ์ถœ๋ ฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์˜ˆ์ƒ๋˜๋Š” ์ถœ๋ ฅ์€ ๋ฐ์ดํ„ฐ ๊ทธ๋ฆฌ๋“œ์— ์ถ”๊ฐ€ ๋œ ๋ณต์ œ ๋œ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. DragOver ๋ฐ Drop ์ด๋ฒคํŠธ์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ GongSolutions.Wpf.DragDrop.DropInfo.cs (์ฝ”๋“œ๋Š” Data = (e. Data.GetDataPresent (dataFormat))? e.Data.GetData (dataFormat) : e.Data;).

์–ด๋–ค ๋ฒ„์ „์˜ ์ œํ’ˆ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
0.1.3 (์–ด์…ˆ๋ธ”๋ฆฌ ๋ฒ„์ „)-์†Œ์Šค์—์„œ ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.
์œˆ๋„์šฐ XP

์•„๋ž˜์— ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.

์˜ˆ์™ธ ์„ธ๋ถ€ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

System.Runtime.InteropServices.COMException์ด ์‚ฌ์šฉ์ž ์ฝ”๋“œ์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
Message = Invalid tymed (Exception from HRESULT : 0x80040069 (DV_E_TYMED))
์ถœ์ฒ˜ = mscorlib
ErrorCode = -2147221399
StackTrace :
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 & ํ˜•์‹, STGMEDIUM & ๋งค์ฒด)
System.Windows.DataObject.OleConverter.GetDataInner (FORMATETC & formatetc, STGMEDIUM & medium)์—์„œ
System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL (๋ฌธ์ž์—ด ํ˜•์‹, DVASPECT aspect, Int32 ์ธ๋ฑ์Šค)
System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject (๋ฌธ์ž์—ด ํ˜•์‹, DVASPECT aspect, Int32 ์ธ๋ฑ์Šค)
System.Windows.DataObject.OleConverter.GetData (String format, Boolean autoConvert, DVASPECT aspect, Int32 index)์—์„œ
System.Windows.DataObject.OleConverter.GetData (String format, Boolean autoConvert)์—์„œ
System.Windows.DataObject.GetData (String format, Boolean autoConvert)์—์„œ
System.Windows.DataObject.GetData (๋ฌธ์ž์—ด ํ˜•์‹)์—์„œ
GongSolutions.Wpf.DragDrop.DropInfo..ctor (Object sender, DragEventArgs e, DragInfo dragInfo)
GongSolutions.Wpf.DragDrop.DragDrop.DropTarget_PreviewDragOver (Object sender, DragEventArgs e)
GongSolutions.Wpf.DragDrop.DragDrop.DropTarget_PreviewDragEnter (Object sender, DragEventArgs e)
System.Windows.DragEventArgs.InvokeEventHandler (Delegate genericHandler, Object genericTarget)์—์„œ
System.Windows.RoutedEventArgs.InvokeHandler (๋Œ€๋ฆฌ์ž ์ฒ˜๋ฆฌ๊ธฐ, ๊ฐœ์ฒด ๋Œ€์ƒ)
System.Windows.RoutedEventHandlerInfo.InvokeHandler (Object target, 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 ๋Œ“๊ธ€

_From cheaster ... @ gmail.com on December 07, 2010 15 : 25 : 00_
๋” ๋งŽ์€ ์ •๋ณด ....

์‹ค์ œ ๋ฌธ์ œ๋Š” IDragInfo.Data๋ฅผ System.Windows.DataObject ๊ฐœ์ฒด๋กœ ์„ค์ •ํ•  ๋•Œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋ฐ๋ชจํ•˜๊ธฐ ์œ„ํ•ด ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฒจ๋ถ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‘ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋‘ ์ธ์Šคํ„ด์Šค ์‚ฌ์ด์˜ ๋ชฉ๋ก ์ƒ์ž์—์„œ ํ•ญ๋ชฉ์„ ๋Œ์–ด๋ณด์‹ญ์‹œ์˜ค.

DataObject๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” O / S ๋กœ์˜ ํŒŒ์ผ ๋“œ๋กญ๋„ ํ—ˆ์šฉํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

_From fahad ... @ gmail.com on August 24, 2011 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 ๋“ฑ๊ธ‰