Написал такой незамысловатый компонент C# COM:
namespace COMTest
{
[ComVisible(false)]
public delegate void OnTestEvent();
public interface If1 {
string Name2 { get; set; }
void Test();
}
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
public interface _If1Events {
void OnTest();
}
/// <summary>
/// Summary description for Class1.
/// </summary>
[ClassInterface(ClassInterfaceType.None)
,ComSourceInterfacesAttribute(typeof(_If1Events))]
public class Class1 : If1
{
public event OnTestEvent OnTest;
public Class1()
{
}
public string Name2 {
get { return "Vasia"; }
set { }
}
public void Test() {
OnTest();
}
}
}
Тестирую в VB — событие OnTest замечательно запускается. Пытаюсь прикрутить к Delphi.
Делаю Import TypeLib, затем правлю немного mscorlib (типы). Компонент замечательно создается, Name2 работает. Ставлю обработчик на событие. При вызове Test возникает OleException с сообщением "not implemented". А кто не реализован — непонятно совсем. Может кто сталкивался с такими граблями, вроде все путем делаю.
Попробуй Tools->Debbuger Options->Language Exceptions->Stop On Delphi Exceptions убрать галочку.
А вдруг поможет!
Хочется отметить, что при соединении "рукми" — все работает отлично:
Cf1 := CreateOleObject('COMTest.Class1') as If1;
EventSink := TEventSink.Create as _If1Events;
Container := Cf1 as IConnectionPointContainer;
OleCheck(Container.FindConnectionPoint(_If1Events, ConnectionPoint));
OleCheck(ConnectionPoint.Advise(EventSink, Cookie));
Cf1.Test;
ConnectionPoint.UnAdvise(Cookie);
Cf1 := nil;
TEventSink.OnTest — вызывается токо в путь.
Здравствуйте, BalTun, Вы писали:
BT>Попробуй Tools->Debbuger Options->Language Exceptions->Stop On Delphi Exceptions убрать галочку.
BT>А вдруг поможет!
Уже сделано, даже почти в первую очередь, понятней не стало.