NonComVisibleBaseClass
От: romstyop  
Дата: 26.09.07 09:49
Оценка:
Есть контрол унаследованный от базового класса из сторонней сбоки (изменения не возможны).
На этом контроле расположен 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.

Как с этим бороться???
Re: NonComVisibleBaseClass
От: ApsPro Россия  
Дата: 26.09.07 10:14
Оценка: 3 (1)
Здравствуйте, 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
{
    //...
}
Если нам не помогут, мы тоже никого не пощадим...
Re[2]: NonComVisibleBaseClass
От: romstyop  
Дата: 26.09.07 10:31
Оценка:
Здравствуйте, 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>



Огромное спасибо!
Работает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.