Как реализовать загрузку асинхронного файла в C # ActiveX - PullRequest
0 голосов
/ 14 января 2011

Я делаю переопределение элемента управления C ++ ActiveX в C #.

Версия C ++ использует класс свойств, который наследуется от CDataPathProperty. Как должен выглядеть следующий код в C #?

class CFileProperty : public CDataPathProperty
{
 DECLARE_DYNAMIC(CFileProperty )
    ...
}

Любые ссылки приветствуются.

Что я на самом деле пытаюсь сделать: ActiveX размещается в IE, внутри тега объекта:

<object type="application/content-type" data="path-or-url-to-file">
    <PARAM name="Url" value="path-or-url-to-file" />
</object>

Таким образом, IE должен загрузить сам файл и предоставить его ActiveX. Я должен убедиться, что файл не загружается дважды! Конечно, я был бы признателен за решение, в котором используется параметр data, а параметр url устарел.

1 Ответ

0 голосов
/ 15 января 2011

Я не смог найти компонент CDataPathProperty в C #. Поэтому я искал альтернативный подход.

Для правильной обработки тега объекта с типом содержимого и атрибутами данных можно реализовать IPersitMoniker. Единственный соответствующий метод - Load.

 public void Load(int fFullyAvailable, IMoniker pmk, IBindCtx pbc, uint grfMode)
 {
     if (pmk == null)
         throw new ArgumentNullException("pmk");

     string url;
     pmk.GetDisplayName(null, null, out url);

     // Use the moniker to download the persisted data
     // and obtain an IStream on that data
     Guid iid = InterfaceID.IID_IStream;
     object pStream;
     pmk.BindToStorage(pbc, null, ref iid, out pStream);

     // do whatever you want with the data inside pStream
     ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...