Мой вопрос очень похож на эти два:
События C # компонента?
C # - запись COM-сервера - события не запускаются на клиенте
Однако то, что сработало для них, не работает для меня. Файл библиотеки типов не имеет никаких намеков на определения событий, поэтому Delphi его не видит. Как и следовало ожидать, класс отлично работает для других приложений на C #.
Инструменты COM-сервера:
- Visual Studio 2010
- .NET 4.0
Приложения Delphi:
Вот упрощенная версия кода:
/// <summary>
/// Call has arrived delegate.
/// </summary>
[ComVisible(false)]
public delegate void CallArrived(object sender, string callData);
/// <summary>
/// Interface to expose SimpleAgent events to COM
/// </summary>
[ComVisible(true)]
[GuidAttribute("1FFBFF09-3AF0-4F06-998D-7F4B6CB978DD")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IAgentEvents
{
///<summary>
/// Handles incoming calls from the predictive manager.
///</summary>
///<param name="sender">The class that initiated this event</param>
///<param name="callData">The data associated with the incoming call.</param>
[DispId(1)]
void OnCallArrived(object sender, string callData);
}
/// <summary>
/// Represents the agent side of the system. This is usually related to UI interactions.
/// </summary>
[ComVisible(true)]
[GuidAttribute("EF00685F-1C14-4D05-9EFA-538B3137D86C")]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(IAgentEvents))]
public class SimpleAgent
{
/// <summary>
/// Occurs when a call arrives.
/// </summary>
public event CallArrived OnCallArrived;
public SimpleAgent() {}
public string AgentName { get; set; }
public string CurrentPhoneNumber { get; set; }
public void FireOffCall()
{
if (OnCallArrived != null)
{
OnCallArrived(this, "555-123-4567");
}
}
}
Файл библиотеки типов содержит определения свойств и методов, но события не отображаются. Я даже открыл библиотеку типов в средстве просмотра Delphi, чтобы убедиться. Приложение Delphi может прекрасно видеть и использовать любые свойства, методы и функции. Он просто не видит события.
Буду признателен за любые указатели или статьи для чтения.
Спасибо!