Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перетаскивание виртуальных файлов в проводник 
:(
    Опции темы
Vadimka1234
Дата 12.10.2012, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 5.9.2012

Репутация: нет
Всего: нет



Всем привет. Есть задача- реализовать перетаскивание файлов из приложения WindowsForms в explorer. Основная трудность заключается в том, что файлов в системе нет, поэтому обычный DataObject не подходит. Уже есть реализация своего DataObject наследующая System.runtime.interropservices....IdataObject. проблема заключается в том, что при формировании очередного объекта необходимо в структуре STGMEDIUM передавать указатель на интерфейс Istream, который тоже не реализован в NET, правда можно использовать WINAPI функцию CreateStreamonHglobal, но при передачи больших файлов это не катит, поэтому в инете нашел, что нужно реализовывать свой класс наследующий этот интерфейс. Вот код:

Код

   public class CSharpIstreamWraper : IStream
        {

            public Stream InnerStream;
            public string name;


            public CSharpIstreamWraper(Stream NetworkStream, string name_ = null)
            {
                InnerStream = NetworkStream;
                name = name_;

            }

            public void Clone(out IStream istream)
            {
                istream = (CSharpIstreamWraper)(new CSharpIstreamWraper(InnerStream));
            }

            public void Commit(int i1)
            {
                throw new NotImplementedException();
            }


            public void CopyTo(IStream istr, long i1, IntPtr ptr1, IntPtr ptr2)
            {
                throw new NotImplementedException();
            }

            public void LockRegion(long l1, long l2, int i1)
            {
                throw new NotImplementedException();
            }

            public void Read(byte[] pv, int cb, System.IntPtr pcbRead)
            {
                Marshal.WriteInt32(pcbRead, (Int32)InnerStream.Read(pv, 0, cb));
            }

            public void Revert()
            {
                throw new NotImplementedException();
            }

            public void Seek(long dlibMove, int dwOrigin, System.IntPtr plibNewPosition)
            {
                Marshal.WriteInt64(plibNewPosition, InnerStream.Seek(dlibMove, (SeekOrigin)dwOrigin));
            }


            public void SetSize(long l1)
            {
                throw new NotImplementedException();
            }

            public void Stat(out  System.Runtime.InteropServices.ComTypes.STATSTG st, int i)
            {
                st = new System.Runtime.InteropServices.ComTypes.STATSTG();
            }

            public void UnlockRegion(long l1, long l2, int i1)
            {
                throw new NotImplementedException();
            }

            public void Write(byte[] pv, int cb, System.IntPtr pcbRead)
            {
                int written = Marshal.ReadInt32(pcbRead);
                InnerStream.Write(pv, 0, written);

                //    InnerStream.Write(pv, 0, cb);
                //    Marshal.WriteInt64(pcbRead, cb);
            }

        }


Если я использую эту реализацию, то получаю при перетаскивании ошибку: Неверный параметр
Если же пользоваться CreateStreamOnHGlobal, то все работает 

Более детальное описание ошибки дать не могу так если запускать проект под Visual Studio то сразу возникает ошибка, поэтому приходится без отладчика.

Уже потратил неделю но так ничего и не добился.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0372 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.