0 / 0 / 0
Регистрация: 24.06.2009
Сообщений: 19

Передача параметров из COM-сервера

07.05.2010, 08:01. Показов 3943. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется COM-сервер написанный на C#, и из него необходимо в 1С передавать не примитивные типы, а собственные структуры и классы, возможно ли это реализовать, и если да, то как потом раскручивать эти структуры в 1С.

Буду благодарен за любые примеры и советы.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2010, 08:01
Ответы с готовыми решениями:

Передача параметров через список параметров формы
Hi all! У кого есть опыт передачи параметров через заголовочный список параметров формы? Желетельно пример записи. Заранее...

Передача нескольких параметров в pthread_create (передача структуры)
Здравствуйте. Мне нужно передать последним параметром в функцию pthread_create следующую структуру struct data { float a; ...

Программа мониторинга параметров сервера
Здравствуйте! Есть сервер, я снял с него параметры(ip,температура процессора и т.д.) и перенес их в xml файл. Проблема в том, что не знаю...

9
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
07.05.2010, 09:07
Цитата Сообщение от Sv879 Посмотреть сообщение
Имеется COM-сервер написанный на C#, и из него необходимо в 1С передавать не примитивные типы, а собственные структуры и классы, возможно ли это реализовать, и если да, то как потом раскручивать эти структуры в 1С.

Буду благодарен за любые примеры и советы.
Передать можно что угодно, а вот раскрутить вряд ли получится. Можно передавать готовый COM объект и в 1С дергать его свойства/методы.
0
0 / 0 / 0
Регистрация: 24.06.2009
Сообщений: 19
07.05.2010, 09:49  [ТС]
я вот тут нашел интересный пример передачи структуры из COM-сервера:

определение структуры в COM-сервере:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 [ComVisible(true)]
  // Определяем, что все объекты структуры в памяти располагаются последовательно в том порядке, в котором
  // они должны маршалиться в unmanaged.
  [StructLayout(LayoutKind.Sequential)]
  [Guid("E1AB60D5-F8F5-41fe-BD0D-AE2AC94237DD")]
  public struct MyStruct
  {
    // Строка
    [MarshalAs(UnmanagedType.BStr)]
    public string wow;
    // Массив. Массив следует маршаллить в виде SafeArray, потому как так с ним можно работать из скриптовых
    // языков, подобных VBA или Javascript. Конечно, в случае C++ работа с SafeArray не самая приятная
    // процедура, но это уже издержки производства. Второй параметр задает тип объектов в массиве - в нашем
    // случае это четырехбайтное знаковое целое.
    [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_I4)]
    public int[] gig;
    // Задам маршаллинг объекта в виде указателя на интерфейс IDispatch. В этом случае .NET требует
    // чтобы параметр был определен как object.
    [MarshalAs(UnmanagedType.IDispatch)]
    public object self;
  }
C#
1
2
3
4
5
6
    public void GetStruct(ref MyStruct ms)
    {
      ms.gig = new int[] { 1, 2, 3, 4, 5 };
      ms.self = this;
      ms.wow = "wow";
    }
Работа со структурой в Excel:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim a As TestCoClass
Dim s As String
Dim b As MyStruct
 
Sub main()
Set a = New TestCoClass
b.wow = "baaa"
a.GetStruct b
MsgBox b.gig(3)
MsgBox b.wow
Set a = Nothing
End Sub
Но теперь не понятно, как в 1С объявить тип MyStruct (в Excel то мы подключаем нашу бибилиотеку через Tools->References, поэтому там тип MyStruct известен)?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
07.05.2010, 10:07
В примере у структуры есть свой GUID, значит она является COM объектом, значит она зарегистрирована в реестре, поэтому ее можно напрямую объявлять как тип.
А еще можно поработать со свойствами СОМ объектов, которые бы возвращали нужную структуру, к примеру есть объект MyObj, который свойством (допустим Struct) возвращает MyStruct в 1С это можно будет записать примерно так
Code
1
2
Объект = СоздатьCOMОбъект("MyObj.1");
Объект.Struct.wow = "аааа";
1
0 / 0 / 0
Регистрация: 24.06.2009
Сообщений: 19
07.05.2010, 10:37  [ТС]
В примере у структуры есть свой GUID, значит она является COM объектом, значит она зарегистрирована в реестре, поэтому ее можно напрямую объявлять как тип.
Пишу в 1С так:
a = СоздатьОбъект("ClassLibrary1.MyStruct");

но пишет, что невозможно создать.

А еще можно поработать со свойствами СОМ объектов, которые бы возвращали нужную структуру
В c# добавил:
C#
1
2
3
4
5
    public MyStruct Struct()
    {
      MyStruct ms = new MyStruct();
      return ms;
    }
в 1С:
1C
1
2
  a = СоздатьОбъект("ClassLibrary1.TestCoClass");    
  a.Struct.wow = "dddd";
Выдает ошибку:
a.Struct.wow = "dddd";
Тип переменной не поддерживается
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
07.05.2010, 10:49
тогда единственный правильный выход - через полноценный СОМ объект со своим интерфейсом. Т.е. один начальный объект инициализирует некий "дочерний" и с последним уже работать.
0
0 / 0 / 0
Регистрация: 24.06.2009
Сообщений: 19
07.05.2010, 11:45  [ТС]
Т.е. один начальный объект инициализирует некий "дочерний" и с последним уже работать.
не очень понял, объясни пожалуйста
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
07.05.2010, 12:00
Цитата Сообщение от Sv879 Посмотреть сообщение
не очень понял, объясни пожалуйста
сейчас твой сервер содержит один объект, допиши в него, что бы он содержал 2 объекта
1
0 / 0 / 0
Регистрация: 24.06.2009
Сообщений: 19
07.05.2010, 12:11  [ТС]
oxotnik,

всё получилось, спасибо огромное!!!
0
besworland
28.05.2010, 14:28
Доброго времени суток.

А если выполняется передача объекта класса, то механизм такой же или нет?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.05.2010, 14:28
Помогаю со студенческими работами здесь

Передача параметров
Необходимо передать шесть параметров из одной переменной, а именно: имеется EditBox со значением например, 01:23:45, и шесть переменных,...

Передача параметров
Доброго времени суток всем! Возникла такая проблема, очень прошу помощи. Реализую паттерн MVP. После переноса бизнес логики приложения из...

передача параметров
подскажите пожалуйста почему в программе во второй процедуре var A:matrix передаем по ссылке а не по значению, чем это лучше? ...

Передача параметров.
Как процедуре передать параметры по ссылке, если параметром является vector (STL/CLR)? (Язык C++) При приминении амперсенда (&)...

Передача параметров
Доброго времени суток ! Передаю параметры через POST запрос из textarea в котором находится пару строк html, принимаю я это всё в одну...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru