Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как в delphi подписаться на событие из сборки c#

42K
19 марта 2011 года
PavluxaF
10 / / 08.04.2009
Доброго времени суток! Вопрос чуток не по адресу, но делфисты много умного не ответили.

Есть написанная на c# сборка. Требуется чтобы эта сборка функционировала в составе приложения Delphi.

Активно прогуглив тему решил создать пробный проект. Написал простейшую class library код далее. (в качестве примера брал http://krez0n.org.ua/archives/248)

Проблема в следующем. При регистрации скомпиленной dll при помощи regasm (использовался regasm 4 framework-a) в .tlb удаляются все event-ы, соответственно из приложений delphi они не видны.

Как в delphi подписаться на событие из сборки c#

Гугл по данной тематике молчит мертвой тишиной. Если кто может помочь буду очень благодарен.

Код:
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 = "ТЕКСТ"});
        }
    }
}
5
19 марта 2011 года
hardcase
4.5K / / 09.08.2005
А методы add_TestEvent и remove_TestEvent тоже?
Хотя мне также не понятна эта конструкция точки зрения управления памятью.
Предлагаю сделать специальный метод, принимающей функцию (делегат) для организации обратного вызова.
42K
20 марта 2011 года
PavluxaF
10 / / 08.04.2009
Пробовал как ТУТ

семпл нашел только этот 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"

Что делать не знаю! Если у кого-нибудь есть рабочие семплы буду благодарен
42K
20 марта 2011 года
PavluxaF
10 / / 08.04.2009
как в delphi вызвать ClrCreateInstance?
7
20 марта 2011 года
@pixo $oft
3.4K / / 20.09.2006
Думаю,это поможет
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог