|
Внешняя компонента на C# и интерфейс IPlatformInfo | ☑ | ||
---|---|---|---|---|
0
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 нет :( Подскажите, кто знает, в чем косяк? |
|||
1
Dmitry1c
21.10.18
✎
17:17
|
А ты хочешь нативную компоненту?
|
|||
2
mike124
21.10.18
✎
20:18
|
СОМ, конечно.
Там же интерфейсы с гуидами - явно не нативная. |
|||
3
mike124
23.10.18
✎
16:29
|
Похоже, рано я хвалил компоненты на С++...
IPlatformInfo вообще недоступен внешним компонентам. Только драйверам. Но для работы с драйверами используются другие инструменты. Судя по всему, именно поэтому драйверам и доступен этот интерфейс. Внешним компонентам инфа о платформе недоступна через стандартные интерфейсы. Хоть на C# их пиши, хоть на ассемблере :( |
|||
4
Garykom
гуру
23.10.18
✎
16:54
|
(0) Можешь задачу популярнее объяснить?
Что ты хочешь сделать для чего тебе нужно знать описание платформы 1С? |
|||
5
Garykom
гуру
23.10.18
✎
16:56
|
И да в 1С нет никаких "драйверов", есть только драйвера ТО (и прочего внешнего оборудования и/или расширения функционала) в виде ВК (по технологии com или native)
Кроме этого еще сама платформа 1С представляет COM интерфейс для использования из чего то внешнего что это умеет. |
|||
6
PloAl
23.10.18
✎
16:59
|
Посмотрел описание СОМ компонент, не нашел про драйвера ничего.
Пример с описанием там тоже есть для с++. Думаю в (3) вы ошибаетесь. Возможно проблема с guid, попробуйте погуглить его в реестре. Также как вариант, из COM насколько помню можно вызывать встроенные и написанные в конфигурации функции. |
|||
7
Dmitry1c
23.10.18
✎
17:00
|
(2) не проще передавать вызывая из платформы компоненту соответствующую информацию в компоненту?
|
|||
8
Garykom
гуру
23.10.18
✎
17:46
|
(7) Я подозреваю что он подключается извне к 1С из проги на C# и хочет узнать к какой платформе подрубился
|
|||
9
mike124
25.10.18
✎
22:06
|
Не надо гадать: сделайте ВК на все равно на чем, и продемонстрируйте, что IPlatformInfo доступен.
Что касается драйверов: естественно, я имел в виду драйвера ТО. С ними 1С работает посредство других функций. Соответственно, там и инфа другая драйверу доступна. В том числе и интерфейсы. Про них подробно написано в документе "Требования к разработке драйверов подключаемого оборудования". Что касается, на чем писать ВК: да без разницы. Шарп, С++ - заявленные интерфейсы должны быть доступны. По поводу зачем: да пофиг, зачем. Надо! В частности, зная версию 1С и тип клиента ВК может как-то изменять свое поведение: это очевидно. |
|||
10
Garykom
гуру
25.10.18
✎
22:21
|
(9) Вы чего то путаете, "драйвера ТО" это обычные ВК (COM или NativeAPI), вся разница что они обычно используют механизм "внешних событий"
Хотя это совсем не обязательно и обычная "ВК не драйвер" вполне может их тоже использовать. Кроме ВК 1С еще умеет работать с обычными COM объектами (не дописанными по формату 1С) и все, больше ничего нет. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |