2009-01-07 9 views

Répondre

4

Le plus simple est d'utiliser le script client pour transmettre les valeurs des paramètres à l'ActiveX

<html xmlns="http://www.w3.org/1999/xhtml" > 

function Rundata(file) 
    {    
     var winCtrl = document.getElementById("YourActiveX");      
     winCtrl.Option1 = file;    
     winCtrl.WriteToFile();   
    } 

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 

    <asp:Button runat="server" ID="Button1" OnClientClick="javascript:Rundata('valuetoRetrieve2');" /> 
</div> 
</form> 

Si vous ne pouvez pas utiliser le script client, vous pouvez essayer cette façon:

Disons que vous voulez lire un paramètre tel que:

<object id="YourActiveX" classid="clsid:6b1bdf22-1c1d-774e-cd9d-1d1aaf7fd88f" 
    width="300px" height="200px"> 
    <param name="option1" value="valuetoRetrieve" /> 
    </object> 

Vous besoin d'exposer les interfaces COM suivantes dans votre projet:

[ComImport] 
[Guid("55272A00-42CB-11CE-8135-00AA004BB851")] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IPropertyBag 
{ 
    void Write([InAttribute] string propName, [InAttribute] ref Object ptrVar); 
    void Read([InAttribute] string propName, out Object ptrVar, int errorLog); 
} 

[ComImport] 
[Guid("37D84F60-42CB-11CE-8135-00AA004BB851")] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
interface IPersistPropertyBag 
{ 

    [PreserveSig] 
    void InitNew(); 

    [PreserveSig] 
    void Load(IPropertyBag propertyBag, int errorLog); 

    [PreserveSig] 
    void Save(IPropertyBag propertyBag, [InAttribute] bool clearDirty, [InAttribute] bool saveAllProperties); 

    [PreserveSig] 
    void GetClassID(out Guid classID); 
} 

Votre contrôle activeX doit implémenter ces interfaces. Il existe une méthode que vous devez implémenter:

void IPersistPropertyBag.Load(IPropertyBag propertyBag, int errorLog) 
    { 
     object value; 
     propertyBag.Read("option1", out value, errorLog); 
     string parameter = (string)value; 
    } 

Voilà! paramètre devrait être égal à "valuetoRetrieve"

+0

Éclaté dans IE11 – dizel3d

3

J'essayais de faire que mon C# ActiveX reçoive les propriétés PARAM dans un tag OBJECT.

J'ai essayé d'utiliser la solution proposée ici, et j'ai trouvé IE plantage lors du chargement de mon objet ...

Enfin je pourrais l'obtenir en utilisant différentes interfaces droit IPropertyBag et IPersistPropertyBag:

[ComVisible(true), ComImport, 
Guid("0000010C-0000-0000-C000-000000000046"), 
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IPersist 
{ 
    [PreserveSig] 
    int GetClassID([Out] out Guid pClassID); 
} 

[ComVisible(true), ComImport, 
Guid("37D84F60-42CB-11CE-8135-00AA004BB851"),//Guid("5738E040-B67F-11d0-BD4D-00A0C911CE86"), 
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IPersistPropertyBag : IPersist 
{ 
    #region IPersist 
    [PreserveSig] 
    new int GetClassID([Out] out Guid pClassID); 
    #endregion 

    [PreserveSig] 
    int InitNew(); 

    [PreserveSig] 
    int Load(
    [In] IPropertyBag pPropBag, 
    [In, MarshalAs(UnmanagedType.Interface)] object pErrorLog 
    ); 

    [PreserveSig] 
    int Save(
    IPropertyBag pPropBag, 
    [In, MarshalAs(UnmanagedType.Bool)] bool fClearDirty, 
    [In, MarshalAs(UnmanagedType.Bool)] bool fSaveAllProperties 
    ); 
} 

[ComVisible(true), ComImport, 
Guid("55272A00-42CB-11CE-8135-00AA004BB851"), 
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IPropertyBag 
{ 
    [PreserveSig] 
    int Read(
    [In, MarshalAs(UnmanagedType.LPWStr)] string pszPropName, 
    [In, Out, MarshalAs(UnmanagedType.Struct)] ref object pVar, 
    [In] IntPtr pErrorLog); 

    [PreserveSig] 
    int Write(
    [In, MarshalAs(UnmanagedType.LPWStr)] string pszPropName, 
    [In, MarshalAs(UnmanagedType.Struct)] ref object pVar); 
} 

Ensuite, J'ai mis en œuvre les méthodes de chargement comme ceci:

#region IPropertyBag Members 

    public int Read(string pszPropName, ref object pVar, IntPtr pErrorLog) 
    { 
     pVar = null; 
     switch (pszPropName) 
     { 
      case "FileType": pVar = _fileType; break; 
      case "WebServiceUrl": pVar = _webServiceUrl; break; 
      case "Language": pVar = _language; break; 
     } 

     return 0; 
    } 

    public int Write(string pszPropName, ref object pVar) 
    { 
     switch (pszPropName) 
     { 
      case "FileType": _fileType = (string)pVar; break; 
      case "WebServiceUrl": _webServiceUrl = (string)pVar; break; 
      case "Language": _language = (string)pVar; break; 
     } 

     return 0; 
    } 

    #endregion 

    #region IPersistPropertyBag Members 

    public int GetClassID(out Guid pClassID) 
    { 
     throw new NotImplementedException(); 
    } 

    public int InitNew() 
    { 
     return 0; 
    } 

    public int Load(IPropertyBag pPropBag, object pErrorLog) 
    { 
     object val = null; 

     pPropBag.Read("FileType", ref val, IntPtr.Zero); 
     Write("FileType", ref val); 

     pPropBag.Read("WebServiceUrl", ref val, IntPtr.Zero); 
     Write("WebServiceUrl", ref val); 

     pPropBag.Read("Language", ref val, IntPtr.Zero); 
     Write("Language", ref val); 

     return 0; 
    } 

    public int Save(IPropertyBag pPropBag, bool fClearDirty, bool fSaveAllProperties) 
    { 
     return 0; 
    } 

    #endregion 

Et cela a fonctionné.

Espérons que cela peut aider quelqu'un dans la même situation.

+0

Ne fonctionne pas, mais ne plante pas IE. – dizel3d

Questions connexes