Здравствуйте, -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;
}