Проблема перетаскивания IDataObject, приведение из __ComObject - PullRequest
2 голосов
/ 11 ноября 2011

У меня возникла проблема, связанная со следующим сценарием. Приложение A имеет DataGridView, из которого выбираются объекты.Они перетаскиваются в DataGridView внутри приложения B, и объекты копируются в новый список.Вот код в приложении A, подготавливающий перетаскивание:

       ArrayList ToDrag = this.GetSelectedBoundItems();
       DataObject data = new DataObject(ToDrag);
       this.DoDragDrop(data, DragDropEffects.Move | DragDropEffects.Copy);

Проблема: получающий конец не может получить ArrayList.Вот код для этого:

 //formats has the value of "System.Collections.ArrayList"
 var formats = myRetrievedObject.GetFormats();

 //candoit has the value "true"
 var candoit = myRetrievedObject.GetDataPresent(typeof(ArrayList));

 //DraggedItems is of type "System.__ComObject"
 var DraggedItems = myRetrievedObject.GetData(typeof(ArrayList));

 //this returns null.  I 'think' this should work
 ArrayList DraggedItems2 = myRetrievedObject.GetData(typeof(ArrayList)) as ArrayList;

 //This throws an exception (see below)
 ArrayList DraggedItems2 = (ArrayList)myRetrievedObject.GetData(typeof(ArrayList)) as ArrayList;

Этот раньше работал .С этим произошли две вещи: мы перешли с .net 2.0 на .net 4.0, и этот код был переведен на C ++. Net в C #.

Я не уверен, что мне не хватает.Предполагается, что эти данные будут преобразованы в список массивов.

Спасибо за помощь!

edit Это текст исключения из приведения

Первое случайное исключение типа «System.InvalidCastException» произошло в dfResultsControls.dll

Дополнительная информация: Невозможно привести объект COM типа «System .__ ComObject» к типу класса «System.Collections.ArrayList».Экземпляры типов, которые представляют компоненты COM, не могут быть преобразованы в типы, которые не представляют компоненты COM;однако они могут быть преобразованы в интерфейсы, если базовый компонент COM поддерживает вызовы QueryInterface для IID интерфейса.

1 Ответ

1 голос
/ 07 марта 2012

Создание сериализуемого объекта (данных) решает проблему для меня.

...