Есть контрол унаследованный от базового класса из сторонней сбоки (изменения не возможны).
На этом контроле расположен WebControl.
В html коде выполняется onclick = "window.external.Test();"
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class DocumentClientInfo : DocumentPane
{
public DocumentClientInfo()
: base()
{
InitializeComponent();
webBrowser1.ObjectForScripting = this;
webBrowser1.DocumentText = "...";
}
public void Test()
{
MessageBox.Show("Ok");
}
}
При срабатывании события onclick получаю следющую ошибку
NonComVisibleBaseClass was detected
Message: Был произведен вызов QueryInterface, запрашивающий используемый по умолчанию интерфейс IDispatch видимого управляемого COM-класса "DocumentClientInfo". Однако, поскольку у этого класса нет явного интерфейса по умолчанию, и он является производным от видимого не-COM класса "DocumentPane", вызов QueryInterface завершится со сбоем. Это сделано для того, чтобы уберечь видимый базовый не-COM класс от ограничений, которые накладываются правилами управления версиями COM.
Как с этим бороться???
Здравствуйте, romstyop, Вы писали:
R>NonComVisibleBaseClass was detected
R>Message: Был произведен вызов QueryInterface, запрашивающий используемый по умолчанию интерфейс IDispatch видимого управляемого COM-класса "DocumentClientInfo". Однако, поскольку у этого класса нет явного интерфейса по умолчанию, и он является производным от видимого не-COM класса "DocumentPane", вызов QueryInterface завершится со сбоем. Это сделано для того, чтобы уберечь видимый базовый не-COM класс от ограничений, которые накладываются правилами управления версиями COM.
R>Как с этим бороться???
Определи требуемый внешний интефейс:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IMyInterface
{
void Test();
//...
//...
}
И далее так:
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IMyInterface))]
public partial class DocumentClientInfo : DocumentPane, IMyInterface
{
//...
}
Здравствуйте, ApsPro, Вы писали:
AP>Определи требуемый внешний интефейс:
AP>AP>[ComVisible(true)]
AP>[InterfaceType(ComInterfaceType.InterfaceIsDual)]
AP>public interface IMyInterface
AP>{
AP> void Test();
AP> //...
AP> //...
AP>}
AP>
AP>И далее так:
AP>AP>[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
AP>[System.Runtime.InteropServices.ComVisibleAttribute(true)]
AP>[ClassInterface(ClassInterfaceType.None)]
AP>[ComDefaultInterface(typeof(IMyInterface))]
AP>public partial class DocumentClientInfo : DocumentPane, IMyInterface
AP>{
AP> //...
AP>}
AP>
Огромное спасибо!
Работает.