Иcпользование ExternalRunCommand при работе справочником стандартных изделий

Автор Semargl1990, 23.10.20, 09:27:50

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

Semargl1990

Доброго дня! Подскажите пожалуйста в нижеприведенном функций есть процедура ExternalRunCommand. В SDK написано что это головная функция библиотеки. Каково основная задача этой процедуры простыми словами для непрограммиста?) Пример взять из справочника API библиотеки стандартных изделий.

namespace PartLibAPI
{
    [ClassInterface(ClassInterfaceType.AutoDual)]
    public class InsertKompas
    {
        const string _LIBRARYNAME = "Вставка изделия в Компас из СИ";
        const string _KEYNAME = @"SOFTWARE\Classes\CLSID\{";
        const string _KOMPASLIBRARY = "Kompas_Library";
        const string _DLLPATH = "plclient_kompas.dll";
        const string _KERNEL32 = "kernel32.dll";

        #region Методы для работы библиотеки в Компас
        private KompasObject _kompas;
        // Название библиотеки
        [return: MarshalAs(UnmanagedType.BStr)]
        public string GetLibraryName()
        {
           return _LIBRARYNAME;
        }
        // Головная функция библиотеки
        public void ExternalRunCommand([In] short command, [In] short mode, [In, MarshalAs(UnmanagedType.IDispatch)] object kompas_)
        {
            _kompas = (KompasObject)kompas_;
            switch (command)
            {
                case 1:
                    InsertInKompas(_kompas);
                    break;
            }
        }
        // Функция получения меню
        // Описание функции можно найти в SDK API Компас
        [return: MarshalAs(UnmanagedType.BStr)]
        public string ExternalMenuItem(short number, ref short itemType, ref short command)
        {
            var result = string.Empty;
            itemType = 1; // "MENUITEM"
            switch (number)
            {
                case 1:
                    result = "Вставить";
                    command = 1;
                    break;
                //
                // Для корректной работы библиотеки необходимо добавить конец меню (или подменю)
                //
                case 2:
                   command = -1;
                    itemType = 3; // "ENDMENU"
                    break;
            }
           return result;
        }
        #endregion


KrissKross

Добрый день!

ИМХО
при запуске скомпилированной библиотеки
появляется пункты-команды данной библиотеки
case 1: InsertInKompas(_kompas);
                    break;
с соответствующими названиями
case 1: result = "Вставить";
        command = 1;
        break;

Semargl1990