2011-01-14 3 views
0

Je suis en train de réimplémenter un contrôle C++ ActiveX en C#.Comment implémenter le téléchargement du fichier async en C# ActiveX

La version C++ utilise une classe de propriété qui hérite de CDataPathProperty. Comment le code suivant devrait-il apparaître en C#?

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

Toutes les références ont été appréciées.

Ce que je suis en train d'essayer de faire est la suivante: L'ActiveX est hébergé dans Internet Explorer, à l'intérieur d'une balise d'objet:

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

Alors IE doit télécharger le fichier lui-même et de fournir à l'ActiveX. Je dois m'assurer que le fichier n'est pas téléchargé deux fois! Bien sûr, j'apprécierais une solution, où le paramètre data est utilisé et le paramètre url est obsolète.

Répondre

0

Je n'ai pas trouvé de partie de contibution CDataPathProperty en C#. Donc, je cherchais une approche alternative.

Afin de gérer correctement l'étiquette d'objet avec le type de contenu et les attributs de données, vous pouvez implémenter IPersitMoniker. La seule méthode pertinente est 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 
    ... 
} 
Questions connexes