Есть 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 (кроме имени ничего общего не имеет с указанным в коде), но возникает ошибка см. код. Где траблы?
Здравствуйте 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();
}
}
Здравствуйте kig.
Спасибо, работает!!!
Дело было в
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDispatch)]
, а эти строки эквивалентны
[ComSourceInterfaces("FormulaServer.serverFormulaEvents")]
[ComSourceInterfaces(typeof(serverFormulaEvents))]