Первый плагин на С#

Автор it@bormash.ru, 23.06.20, 15:08:40

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

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

it@bormash.ru

Добрый день,пишу первый плагин для Лоцман 2018.Перепробовал все возможные варианты плагинов(хотел посмотреть как это вообще работает).Прошу скинуть для примера любой рабочий проект,который можно подцепить и посмотреть.
Пробовал проект (http://achechulin.blogspot.com/2018/10/plugin-c-sharp.html),

it@bormash.ru

26.06.20, 08:50:17 #1 Последнее редактирование: 26.06.20, 11:37:19 от it@bormash.ru
Перепробовал все варианты, не понимаю почему не отображается пользовательское меню.
public class PluginFunctions
    {
        [DllExport("GetPluginInfo", CallingConvention.StdCall)]
        public static Int32 GetPluginInfo(Int32 Param, IntPtr Value)
        {
            return 0;
        }

        [DllExport("InitUserDLLCom", CallingConvention.StdCall)]
        public static Int32 InitUserDLLCom(IntPtr Value)
        {

       
                if (Value != IntPtr.Zero)
                {
                    for (int i = 0; i < PluginMenu.Length / 2; ++i)
                    {
                        var item = new MenuItem()
                        {
                            menu = PluginMenu[i * 2 + 1],
                            func = PluginMenu[i * 2]
                        };
                        Marshal.StructureToPtr(item, Value, false);
                        Value += Marshal.SizeOf(typeof(MenuItem));
                    }
                }
                return PluginMenu.Length / 2;

        }
        [DllExport("PgiCheckMenuItemCom", CallingConvention.StdCall)]
        public int PgiCheckMenuItemCom(IntPtr Function, IntPtr IPC)
            {

                try
                {
                    string func = Marshal.PtrToStringAnsi(Function);
                    IPluginCall pc = (IPluginCall)Marshal.GetTypedObjectForIUnknown(IPC, typeof(IPluginCall));

                    return 1;
                }
                catch (Exception)
                {
                    return 0;
                }
            }
        [DllExport("ProjectList", CallingConvention.StdCall)]
        public static void ProjectList(IntPtr IPC)
        {
            return;
            if (IPC != null)
            {
                try
                {
                    IPluginCall pc = (IPluginCall)Marshal.GetTypedObjectForIUnknown(IPC, typeof(IPluginCall));
                    Console.WriteLine(pc.IdVersion);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        public static string[] PluginMenu =
            {
                "ProjectList",    "BEFORE_MI_TOOLS#Мои плагины#Тестовый#Список проектов",
                "LinkedFast",     "BEFORE_MI_TOOLS#Мои плагины#Тестовый#Состав" ,
            };

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        struct MenuItem
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
            public string menu;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)]
            public string func;
        }
    }

Matvey Kushakov

Вот мой плагин для обработки BOM-файлов и построения по ним дерева сборки в лоцмане. Работает в 2014 лоцмане. При разработке руководствовался той же статьёй, что и Вы. Надеюсь, окажется полезным.

it@bormash.ru

Спасибо разобрался, все работает.