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.
Éclaté dans IE11 – dizel3d