TAddMenu = record
stName: array [0..MAX_TEXT_LENGTH-1] of AnsiChar;
stItem: array [0..MAX_TEXT_LENGTH-1] of AnsiChar;
end;
function Init(AValue: Pointer): Integer;
function MenuItem(AFunction: PAnsiChar; APlugin: IPlugin): Boolean;
Подскажите, плиз, как написать эту структуру и функции для интерфейса на C#.
Здравствуйте, mDmitriy, Вы писали:
D>На С++ работающий интерфейс плагина выглядит так:
Не понятно, откуда этот кусок кода.
Если это — сам плагин, то наличие экспортируемых функций наводит на мысль о том, что это вовсе не COM, а обычная DLL, с которой работают через LoadLibrary/GetProcAddress, кроме того, непонятно, что такое IPlugin тогда.
Если это хост-приложение, то не понятно, кто, когда и как вызывает у него Init и MenuItem.
Здравствуйте, Visor2004, Вы писали:
V>Здравствуйте, mDmitriy, Вы писали:
D>>Подскажите, плиз, как написать эту структуру и функции для интерфейса на C#.
V>[StructLayout(LayoutKind.Sequential)]
Спасибо большое
А функции?
Здравствуйте, HowardLovekraft, Вы писали:
HL>Здравствуйте, mDmitriy, Вы писали:
D>>На С++ работающий интерфейс плагина выглядит так: HL>Не понятно, откуда этот кусок кода.
Из примера HL>Если это — сам плагин, то наличие экспортируемых функций наводит на мысль о том, что это вовсе не COM, а обычная DLL, с которой работают через LoadLibrary/GetProcAddress,
Это вполне может быть. HL>кроме того, непонятно, что такое IPlugin тогда.
IPlugin — это один из интерфейсов приложения, описан в имеющейся tlb. HL>Если это хост-приложение, то не понятно, кто, когда и как вызывает у него Init и MenuItem.
MenuItem — просто структура. Указатель на массив таких структур передается через параметр функции Init. Вызывает ее приложение в момент подключения плагина.
Здравствуйте, mDmitriy, Вы писали:
D>IPlugin — это один из интерфейсов приложения, описан в имеющейся tlb.
Так а кто вызывает MenuItem и передает туда реализацию IPlugin?
Получается, что хост-приложение умеет работать с плагинами двумя способами (как с COM-объектами и как с обычной DLL через вызов экспортируемых функций) и у вас пример, не имеющий отношения к работе с COM-плагинами? Тогда вопрос поставлен некорректно — нужен пример создания COM-плагина.
Здравствуйте, Visor2004, Вы писали:
V>Здравствуйте, mDmitriy, Вы писали:
V>[DllImport("dllname.dll")] V>public static extern int Init(IntPtr value);
V>[DllImport("dllname.dll", CharSet = CharSet.Ansi)] V>public static extern bool MenuItem(string stFunction, ref IPlugin IP);
Эти функции ищет и в DLL-ке и вызвает хостовое приложение.
Т.е. чтобы поддержать плагины на C# автору топика придется научиться создавать через COM, либо поднимать CLR в своей софте.
Здравствуйте, hardcase, Вы писали:
H>Эти функции ищет и в DLL-ке и вызвает хостовое приложение. H>Т.е. чтобы поддержать плагины на C# автору топика придется научиться создавать через COM, либо поднимать CLR в своей софте.
ну, я же не в курсе какая там у него специфика, он попросил объявление функций, я ему написал
Здравствуйте, HowardLovekraft, Вы писали:
HL>Здравствуйте, mDmitriy, Вы писали:
D>>IPlugin — это один из интерфейсов приложения, описан в имеющейся tlb. HL>Так а кто вызывает MenuItem и передает туда реализацию IPlugin?
MenuItem — просто структура, указатель на список которых передается в параметре функции Init. HL>Получается, что хост-приложение умеет работать с плагинами двумя способами (как с COM-объектами и как с обычной DLL через вызов экспортируемых функций) и у вас пример, не имеющий отношения к работе с COM-плагинами? Тогда вопрос поставлен некорректно — нужен пример создания COM-плагина.
Других примеров, увы, нет... Может, COM-объект я зря сюда приплел, неверно поняв документацию.
Технология COM хост-приложением используется, но, может быть, не для плагинов, а плагины загружаются, как было предположено выше, через LoadLibrary/GetProcAddress.
Само хост-приложение написано на Delphi.
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, Visor2004, Вы писали:
V>>Здравствуйте, mDmitriy, Вы писали:
V>>[DllImport("dllname.dll")] V>>public static extern int Init(IntPtr value);
V>>[DllImport("dllname.dll", CharSet = CharSet.Ansi)] V>>public static extern bool MenuItem(string stFunction, ref IPlugin IP);
H>Эти функции ищет и в DLL-ке и вызвает хостовое приложение. H>Т.е. чтобы поддержать плагины на C# автору топика придется научиться создавать через COM, либо поднимать CLR в своей софте.
э-э... что значит — поднимать CLR?