C# COM & Delphi 6
От: dragon23 Россия none
Дата: 11.07.02 14:33
Оценка:
Есть COM вида:

namespace FormulaServer
{
    public delegate void handlerEventaccessAccept();

    [ComSourceInterfaces("FormulaServer.serverFormulaEvents")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class serverFormula
    {
        public event handlerEventaccessAccept accessAcceptCB;
        protected virtual void _OnaccessAccept()
        {
            if (null != accessAcceptCB)
            {
                accessAcceptCB(); // ошибка Object reference not set to an instance of an object
            }
        }
        public int accessRequest()
        {
            _OnaccessAccept();
        }

    [GuidAttribute("45263A05-8EEB-4809-9DA5-DEC94334FB87")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)]
    public interface serverFormulaEvents
    {
        [DispId(1)]
        void accessAcceptCB();
    }
}


Получаю tlb, делаю _TLB.pas, устанавливаю компонент. Указываю обработчик для OnaccessAccept (кроме имени ничего общего не имеет с указанным в коде), но возникает ошибка см. код. Где траблы?
Re: C# COM & Delphi 6
От: kig Россия  
Дата: 12.07.02 06:45
Оценка: 2 (1)
Здравствуйте dragon23, Вы писали:

D>Есть COM вида:


[skip]


D>Получаю tlb, делаю _TLB.pas, устанавливаю компонент. Указываю обработчик для OnaccessAccept (кроме имени ничего общего не имеет с указанным в коде), но возникает ошибка см. код. Где траблы?


Попробуйте так


namespace FormulaServer
{
    public delegate void handlerEventaccessAccept();

    [ComSourceInterfaces("FormulaServer.serverFormulaEvents")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComSourceInterfaces(typeof(serverFormulaEvents))]
    public class serverFormula
    {
        public event handlerEventaccessAccept accessAcceptCB;
        protected virtual void _OnaccessAccept()
        {
            if (null != accessAcceptCB)
            {
                accessAcceptCB(); // ошибка Object reference not set to an instance of an object
            }
        }
        public int accessRequest()
        {
            _OnaccessAccept();
        }

    [GuidAttribute("45263A05-8EEB-4809-9DA5-DEC94334FB87")]
    [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDispatch)]    
    public interface serverFormulaEvents
    {
        [DispId(1)]
        void accessAcceptCB();
    }
}
Re[2]: C# COM & Delphi 6
От: dragon23 Россия none
Дата: 12.07.02 08:04
Оценка:
Здравствуйте kig.

Спасибо, работает!!!

Дело было в

    InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDispatch)]


, а эти строки эквивалентны

    [ComSourceInterfaces("FormulaServer.serverFormulaEvents")]
    [ComSourceInterfaces(typeof(serverFormulaEvents))]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.