Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Внешняя компонента на C# и интерфейс IPlatformInfo

Внешняя компонента на C# и интерфейс IPlatformInfo
Я
   mike124
 
21.10.18 - 16:38
Исходные условия: платформа 8.3.10 и внешняя компонента, написанная на C#.
Необходимо узнать версию вызывающей платформы из компоненты.

Я использую стандартный (так написано в документах 1С) интерфейс IPlatformInfo. При попытке получить его из IDispatch, который получаю при выполнении Init мне прилетает сообщение, что интерфейс с идентификатором "AAABE126-2230-4A7D-9DDA-8987FD2A62BA" (это гуид IPlatformInfo) не поддерживается.
При этом, другая внешняя компонента, но написанная на С++ прекрасно получает этот интерфейс.

В шарпе IPlatformInfo описан так:

 [Guid("AAABE126-2230-4A7D-9DDA-8987FD2A62BA"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
 interface IPlatformInfo
  {
   UInt32 GetPlatformInfo(ref IntPtr app_info);
  }
//----------------------------------------------------------
public enum AppType :int
  {
   eAppUnknown = -1,
   eAppThinClient = 0,
   eAppThickClient,
   eAppWebClient,
   eAppServer,
   eAppExtConn
  }
//----------------------------------------------------------

 [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode, Pack=8)]
public struct AppInfo
  {
   [MarshalAs(UnmanagedType.BStr)] public string AppVersion;
   [MarshalAs(UnmanagedType.BStr)] public string UserAgentInformation;
   public int Application;
  }

GetPlatformInfo пробовал объявлять по-разному:
UInt32 GetPlatformInfo(ref AppInfo app_info);
UInt32 GetPlatformInfo(out AppInfo app_info);
UInt32 GetPlatformInfo(ref object app_info);

Ничего не помогло.

Все остальные интерфейсы 1С прекрасно находятся. Подозревал, что что-то не так с объявлением GetPlatformInfo, но оказалось, что до проверки совместимости даже не доходит. Пробовал у доступных интерфейсов менять объявления функций до полной несовместимости, но эти интерфейсы прекрасно находятся.

Думал, гуид неверный, но ВК на С++ получает интерфейс IPlatformInfo именно по этому гуиду. Да и в примерах 1С другого гуида для IPlatformInfo нет :(

Подскажите, кто знает, в чем косяк?
 
 
   Dmitry1c
 
1 - 21.10.18 - 17:17
А ты хочешь нативную компоненту?
   mike124
 
2 - 21.10.18 - 20:18
СОМ, конечно.
Там же интерфейсы с гуидами - явно не нативная.
   mike124
 
3 - 23.10.18 - 16:29
Похоже, рано я хвалил компоненты на С++...
IPlatformInfo вообще недоступен внешним компонентам. Только драйверам.
Но для работы с драйверами используются другие инструменты. Судя по всему, именно поэтому драйверам и доступен этот интерфейс. Внешним компонентам инфа о платформе недоступна через стандартные интерфейсы. Хоть на C# их пиши, хоть на ассемблере :(
   Garykom
 
4 - 23.10.18 - 16:54
(0) Можешь задачу популярнее объяснить?

Что ты хочешь сделать для чего тебе нужно знать описание платформы 1С?
   Garykom
 
5 - 23.10.18 - 16:56
И да в 1С нет никаких "драйверов", есть только драйвера ТО (и прочего внешнего оборудования и/или расширения функционала) в виде ВК (по технологии com или native)

Кроме этого еще сама платформа 1С представляет COM интерфейс для использования из чего то внешнего что это умеет.
   PloAl
 
6 - 23.10.18 - 16:59
Посмотрел описание СОМ компонент, не нашел про драйвера ничего.
Пример с описанием там тоже есть для с++.
Думаю в (3) вы ошибаетесь.
Возможно проблема с guid, попробуйте погуглить его в реестре.
Также как вариант, из COM насколько помню можно вызывать встроенные и написанные в конфигурации функции.
   Dmitry1c
 
7 - 23.10.18 - 17:00
(2) не проще передавать вызывая из платформы компоненту соответствующую информацию в компоненту?
   Garykom
 
8 - 23.10.18 - 17:46
(7) Я подозреваю что он подключается извне к 1С из проги на C# и хочет узнать к какой платформе подрубился
   mike124
 
9 - 25.10.18 - 22:06
Не надо гадать: сделайте ВК на все равно на чем, и продемонстрируйте, что IPlatformInfo доступен.

Что касается драйверов: естественно, я имел в виду драйвера ТО. С ними 1С работает посредство других функций. Соответственно, там и инфа другая драйверу доступна. В том числе и интерфейсы. Про них подробно написано в документе "Требования к разработке драйверов подключаемого оборудования".
Что касается, на чем писать ВК: да без разницы. Шарп, С++ - заявленные интерфейсы должны быть доступны.

По поводу зачем: да пофиг, зачем. Надо! В частности, зная версию 1С и тип клиента ВК может как-то изменять свое поведение: это очевидно.
   Garykom
 
10 - 25.10.18 - 22:21
(9) Вы чего то путаете, "драйвера ТО" это обычные ВК (COM или NativeAPI), вся разница что они обычно используют механизм "внешних событий"
Хотя это совсем не обязательно и обычная "ВК не драйвер" вполне может их тоже использовать.

Кроме ВК 1С еще умеет работать с обычными COM объектами (не дописанными по формату 1С) и все, больше ничего нет.
 
 Рекламное место пустует

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует