Уважаемые форумчане - доброй ночи. Может кто силен в С#. Подскажите пожалуйста как вызвать ВнешнееСобытие из внешней компоненты
Вот код на C#
using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Threading;
namespace HowToComObjectFor1C
{
[Guid("F8C9E32B-82AD-40ef-856E-46319E7E7E65")]
internal interface IMyClass
{
[DispId(1)]
//4. описываем методы которые можно будет вызывать из вне
string Test(string mymessage);
}
//5. определим интерфейс для COM-событий(GUID получаем и записываем с помощью утилиты guidgen.exe)
[Guid("C619C891-DD3D-40e3-82A9-8B1987C9FC69"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface IMyEvents
{
[DispId(0x60020001)]
void Event1();
[DispId(0x60020002)]
void Event2();
}
//6. описываем класс реализующий интерфейсы(GUID получаем и записываем с помощью утилиты guidgen.exe)
[Guid("1D52AF68-4EE3-4b2f-8CF7-D8F69F18A15A"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]
public class MyClass : IMyClass //название нашего класса MyClass
{
public event EventHandler Event1;
public event EventHandler Event2;
Внешняя компонента это не просто COM-объект, в нём должны быть реализованы определённые интерфейсы - если интересно, см. "Технология создания внешних компонент" (1цэ правда рекомендует смотреть в сторону NativeAPI, а не COM).
В вашем случае, видимо, достаточно подключить обработчик события через ДобавитьОбработчик(), но к ВнешнемуСобытию это не относится и сигнатура вызова процедуры обработчика будет отличаться.
ну а вообще Процедура ВнешнееСобытие() привязана к событию на форме?
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший