Re[92]: Java vs C# vs C++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 12.10.15 13:12
Оценка:
Здравствуйте, -MyXa-, Вы писали:

MX>Здравствуйте, Serginio1, Вы писали:


S>>Со свойствами проблема, но их можно динамически обернуть. То есть сделать обертку над классом для описания свойв.

S>>Для простых случаев можно так.
S>>
S>> [ComVisible(true)]
S>>    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
S>>  //  [Guid("33B45C9D-1AED-41F9-8880-36AB6AE84749")]
S>>    public interface IEventFor1C

S>> Либо пишу ручками используя анонимные типы. И подписка

MX>Не понял, для каких простых случаев, какими ручками? Ты же оборачиваешь произвольную .NET сборку в COM.

Простых случаев это для методов без параметров и методом с параметром типа Object/

[code]
врап=новый COMОбъект("NetObjectToIDispatch45");
    Сборка=врап.загрузитьСборку(ИмяФайлаСборки); //ПроектИспользованияДелегатов.dll
    тип=Сборка.GetType("ПроектИспользованияДелегатов.КлассДляВнешнихСобытий");
    
    ОбъектССобытием=врап.СоздатьОбъект(Тип,КаталогДляОтслеживанияИзменений);
    Событие=Врап.ПолучитьОбъектДляСобытий(ОбъектССобытием,"Событие");
    СобытиеПереименования=Врап.ПолучитьОбъектДляСобытий(ОбъектССобытием,"СобытиеПереименованияФайла");
    
    ДобавитьОбработчик Событие.Событие, ПриИзмененииДиректории;
    ДобавитьОбработчик СобытиеПереименования.Событие, ПриПереименованииФайла;
[/code]

Сам класс такой.

[cs]
    public class КлассДляВнешнихСобытий
    {
        public string ИзмененныйФайл;
        public string ПереименованныйФайл;
        public event System.Action Событие;
        public event System.Action СобытиеПереименованияФайла;
        FileSystemWatcher watcher;

        private  void ИзмененияВДиректории(object source, FileSystemEventArgs e)
        {
            // Specify what is done when a file is changed, created, or deleted.
            ИзмененныйФайл = e.FullPath + " " + e.ChangeType;
            if (this.Событие != null) Событие();
     
        }

        public КлассДляВнешнихСобытий(string Директория)
        {
            watcher = new FileSystemWatcher();
            watcher.Path = Директория;
            /* Watch for changes in LastAccess and LastWrite times, and
               the renaming of files or directories. */
            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
               | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            // Only watch text files.
            watcher.Filter = "*.*";

            // Add event handlers.
            watcher.Changed += new FileSystemEventHandler(ИзмененияВДиректории);
            watcher.Created += new FileSystemEventHandler(ИзмененияВДиректории);
            watcher.Deleted += new FileSystemEventHandler(ИзмененияВДиректории);
            watcher.Renamed += new RenamedEventHandler(OnRenamed);

            // Begin watching.
            watcher.IncludeSubdirectories = true;

            watcher.EnableRaisingEvents = true;


        
        }
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.