Быстрое создание Внешних Компонент на C#. Примеры использования Глобального Контекста, IAsyncEvent, IExtWndsSupport, WinForms и WPF

0. Serginio 823 15.02.16 11:00 Сейчас в теме
В большинстве случаев хватает и обычного COM объекта, учитывая, что в 8.х можно использовать события. Но иногда нужно использовать Глобальный Контекст для вызова глобальных функций, таких как Сообщить, NewObject и т.д. Кроме того, для использования форм нужен дескриптор окна 1С.
Это продолжение статей
Использование сборок .NET в 1С 7.x b 8.x. Создание внешних Компонент. http://infostart.ru/public/238584/
Там же лежат и исходники

.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
http://infostart.ru/public/417830/

1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp
http://infostart.ru/public/434771/

Использование классов .Net в 1С для новичков
http://infostart.ru/public/448668/

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. AlX0id 16.02.16 08:55 Сейчас в теме

Спасибо, будет что почитать на досуге :)
2. Serginio 823 16.02.16 09:45 Сейчас в теме
Большое спасибо за спасибо.
3. avz_1C 10 16.02.16 12:32 Сейчас в теме
Спасибо. Написано очень толково.
Я систематизировал свои знания по данному предмету, при помощи Вашей статьи.
4. Serginio 823 16.02.16 12:52 Сейчас в теме
Спасибо. Старался. Рад, что мои труды не пропадают зря.
5. O-Planet 6897 17.02.16 03:28 Сейчас в теме
Спасибо за статью. У меня com+ на с++ (Builder). Не совсем понимаю, как внутри этого объекта обратиться к глобальному контексту 1С. Объекты я передаю через VARIANT, например:

STDMETHODIMP TServerImpl::Make(VARIANT Object, int Numb, BSTR FileName)
{
bool Res=mycells->Make(Numb,AnsiString(WideString(FileName).c_bstr()));
Variant(Object).OleFunction("Вставить","Ок",(Res?"yes":"no"));
return S_OK;
}

Но как получить доступ в этой функции к глобальному контексту 1С, чтобы вызвать, например, NewObject? Что передать на вход? Или можно как-то подключиться к самой 1С? Вопрос - как? Не через OLE же. И теоретически, этот com может быть использован и не 1С. Есть возможность проверить, кто его создал и использует?
6. Serginio 823 17.02.16 07:33 Сейчас в теме
Ну судя по
ТипГК = ГК1С.GetType();

App1C = ГК1С.AppDispatch;

 

result = ТипГК.InvokeMember(binder.Name, BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.InvokeMethod, null, App1C, new object[]{value}););
Показать


Адрес функции берется из VMT ГК1С, а в EAX засылается ГК1С.AppDispatch
8. Serginio 823 17.02.16 08:27 Сейчас в теме
Адреса Idispatch GetIDsOfName(), Invoke()
То есть ссылку на Idispatch берется из передаваемого объекта при Init, а объект подставляется AppDispatch
9. Serginio 823 17.02.16 08:33 Сейчас в теме
Помню в Delphi для реализации интерфейса создавалось поле внутри объекта, а в методах интерфейса были заглушки которые корректировали this по смещению поля и вызывали реальные методы интерфейса объекта
10. frkbvfnjh 588 27.02.16 08:31 Сейчас в теме
Лююююююди! Кто нибудь может накидать шаблон на Delphi, что бы можно было работать в глобальном контексте? C# вообще не понимаю, да и COM технология с трудом дается, но очень хочется пользоваться функционалом платформы, поэтому хотелось бы шаблон native-компоненты на Delphi. Я так понимаю для людей, оставивших здесь комментарии, это не составит никакого труда. Сейчас для написания внешних компонент пользуюсь шаблоном из публикации http://infostart.ru/public/168254/. Сжальтесь над немощным... ну что Вам стоит?
11. Serginio 823 27.02.16 09:03 Сейчас в теме
(10) Тебе лучше обратиться сюда http://infostart.ru/public/88060/
Только вот глобальный Контекст это COM.
12. NittenRenegade 88 20.06.18 11:08 Сейчас в теме
Я внедряю CefSharp во внешнюю компоненту. Сложность в том, что её не скомпилируешь в одну dll. У него множество файлов-зависимостей разных типов, без которых например подпроцесс для отображения содержимого страницы просто не запустится.
Когда эти файлы лежат рядом с запускаемым приложением, у меня всё работает. Но когда я компилирую библиотеку и подключаю её из 1С, у меня пустой экран как если бы подпроцесс не стартовал. Подозреваю, дело в зависимостях. Куда сложить файлы зависимостей чтобы они подтянулись к моей dll? Или может как-то иначе эти зависимости прописать в самой dll
15. Serginio 823 20.06.18 12:03 Сейчас в теме
На самом деле если все dll в одной папке и есть доступ к папке для текущего пользователя, то все должно быть нормально
Оставьте свое сообщение
Вопросы с вознаграждением