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

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

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

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

Буду благодарен за любые примеры и советы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2010, 08:01
Ответы с готовыми решениями:

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

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

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

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

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

Буду благодарен за любые примеры и советы.
Передать можно что угодно, а вот раскрутить вряд ли получится. Можно передавать готовый COM объект и в 1С дергать его свойства/методы.
0
0 / 0 / 0
Регистрация: 24.06.2009
Сообщений: 19
07.05.2010, 09:49  [ТС] 3
я вот тут нашел интересный пример передачи структуры из 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
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
07.05.2010, 10:07 4
В примере у структуры есть свой GUID, значит она является COM объектом, значит она зарегистрирована в реестре, поэтому ее можно напрямую объявлять как тип.
А еще можно поработать со свойствами СОМ объектов, которые бы возвращали нужную структуру, к примеру есть объект MyObj, который свойством (допустим Struct) возвращает MyStruct в 1С это можно будет записать примерно так
Код
Объект = СоздатьCOMОбъект("MyObj.1");
Объект.Struct.wow = "аааа";
1
0 / 0 / 0
Регистрация: 24.06.2009
Сообщений: 19
07.05.2010, 10:37  [ТС] 5
В примере у структуры есть свой 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
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
07.05.2010, 10:49 6
тогда единственный правильный выход - через полноценный СОМ объект со своим интерфейсом. Т.е. один начальный объект инициализирует некий "дочерний" и с последним уже работать.
0
0 / 0 / 0
Регистрация: 24.06.2009
Сообщений: 19
07.05.2010, 11:45  [ТС] 7
Т.е. один начальный объект инициализирует некий "дочерний" и с последним уже работать.
не очень понял, объясни пожалуйста
0
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
07.05.2010, 12:00 8
Цитата Сообщение от Sv879 Посмотреть сообщение
не очень понял, объясни пожалуйста
сейчас твой сервер содержит один объект, допиши в него, что бы он содержал 2 объекта
1
0 / 0 / 0
Регистрация: 24.06.2009
Сообщений: 19
07.05.2010, 12:11  [ТС] 9
oxotnik,

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

А если выполняется передача объекта класса, то механизм такой же или нет?
28.05.2010, 14:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2010, 14:28
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru