using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Library
{
/// <summary>
/// Интерфейс тестовой библиотеки
/// </summary>
public interface ITestInterface
{
/// <summary>
/// Текстовый параметр
/// </summary>
string StringProperty { get; set; }
/// <summary>
/// Числовой параметр
/// </summary>
int IntProperty { get; set; }
/// <summary>
/// Метод, работающий с текстовыми значениями
/// </summary>
/// <param name="stringParam"></param>
/// <returns></returns>
string StringMethod(string stringParam);
/// <summary>
/// Метод, работающий с цифровыми значениями
/// </summary>
/// <param name="intParam"></param>
/// <returns></returns>
int IntMethod(int intParam);
/// <summary>
/// Событие
/// </summary>
event EventHandler<TestEventEventArgs> TestEvent;
/// <summary>
/// Метод, вызывающий событие
/// </summary>
void EventMethod();
}
public class TestEventEventArgs : EventArgs
{
public string stringEventParam { get; set; }
public int intEventParam { get; set; }
}
[ClassInterface(ClassInterfaceType.None)]
public class TestClass : ITestInterface
{
private string _stringProperty = "Текстовое значение";
private int _intProperty = 999;
public string StringProperty
{
get { return _stringProperty; }
set { _stringProperty = value; }
}
public int IntProperty
{
get { return _intProperty; }
set { _intProperty = value; }
}
public string StringMethod(string stringParam)
{
return stringParam + " этот текст был прибавлен в результате выполнения метода";
}
public int IntMethod(int intParam)
{
return intParam + 999;
}
public event EventHandler<TestEventEventArgs> TestEvent;
public void EventMethod()
{
TestEvent(this, new TestEventEventArgs{intEventParam = 999,stringEventParam = "ТЕКСТ"});
}
}
}
Как в delphi подписаться на событие из сборки c#
Есть написанная на c# сборка. Требуется чтобы эта сборка функционировала в составе приложения Delphi.
Активно прогуглив тему решил создать пробный проект. Написал простейшую class library код далее. (в качестве примера брал http://krez0n.org.ua/archives/248)
Проблема в следующем. При регистрации скомпиленной dll при помощи regasm (использовался regasm 4 framework-a) в .tlb удаляются все event-ы, соответственно из приложений delphi они не видны.
Как в delphi подписаться на событие из сборки c#
Гугл по данной тематике молчит мертвой тишиной. Если кто может помочь буду очень благодарен.
Код:
Хотя мне также не понятна эта конструкция точки зрения управления памятью.
Предлагаю сделать специальный метод, принимающей функцию (делегат) для организации обратного вызова.
ТУТ
семпл нашел только этот http://www.managed-vcl.com/downloads/FileSystemWatcher.zip
в семпле (в проекте delphi) используется ClrUtils что это и где ее взять - загадка,
Пробовал dll делать как под 2, так и под 4 framework не помогает.
Если в интерфейсе c# создавать только методы все замечательно работает. Если в интерфейс включить event, то при создании tlb он в него включается. При импорте в delphi описанные в сборке event-ы получают тип NotifyEvent (в моем случае event-ы без параметров) Все вроде бы нормально, но при попытке CreateComObject delphi стабильно ругается "Interface not supported"
Что делать не знаю! Если у кого-нибудь есть рабочие семплы буду благодарен
Пробовал как
семпл нашел только этот http://www.managed-vcl.com/downloads/FileSystemWatcher.zip
в семпле (в проекте delphi) используется ClrUtils что это и где ее взять - загадка,
Пробовал dll делать как под 2, так и под 4 framework не помогает.
Если в интерфейсе c# создавать только методы все замечательно работает. Если в интерфейс включить event, то при создании tlb он в него включается. При импорте в delphi описанные в сборке event-ы получают тип NotifyEvent (в моем случае event-ы без параметров) Все вроде бы нормально, но при попытке CreateComObject delphi стабильно ругается "Interface not supported"
Что делать не знаю! Если у кого-нибудь есть рабочие семплы буду благодарен
как в delphi вызвать ClrCreateInstance?
это поможет
Думаю,