Имя: Пароль:
1C
1С v8
Как на C# вызвать ВнешнееСобытие в 1С из ВК
0 oleg_prg
 
15.10.14
01:16
Уважаемые форумчане - доброй ночи. Может кто силен в С#. Подскажите пожалуйста как вызвать ВнешнееСобытие из внешней компоненты

Вот код на 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;

        protected virtual void OnEvent1()
        {
            if (Event1 != null)
                Event1(this, EventArgs.Empty);
        }

        protected virtual void OnEvent2()
        {
            if (Event2 != null)
                Event2(this, EventArgs.Empty);
        }

        public string Test(string mymessage)
        {
            OnEvent1();
            OnEvent2();

            return mymessage + "HELLO!";
        }              
    }
}


КОД В 1С
&НаКлиенте
Процедура ТестDLL(Команда)

     МойОбъект = Новый COMОбъект("HowToComObjectFor1C.MyClass");
     Рез = МойОбъект.Test("Привет!");
     Сообщить(Рез);
       
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Сообщить("ДА!!!");  //Но вот сюда ни как не попаду =(
КонецПроцедуры

Заранее спасибо!
1 Jaap Vduul
 
15.10.14
01:42
Внешняя компонента это не просто COM-объект, в нём должны быть реализованы определённые интерфейсы - если интересно, см. "Технология создания внешних компонент" (1цэ правда рекомендует смотреть в сторону NativeAPI, а не COM).

В вашем случае, видимо, достаточно подключить обработчик события через ДобавитьОбработчик(), но к ВнешнемуСобытию это не относится и сигнатура вызова процедуры обработчика будет отличаться.
2 hhhh
 
15.10.14
01:58
ну а вообще Процедура ВнешнееСобытие() привязана к событию на форме?
Закон Брукера: Даже маленькая практика стоит большой теории.