Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
АлексейЛ
Зарегистрирован: 03.06.2009 Сообщения: 6
|
Добавлено: Ср 03 Июн 2009 10:22 Заголовок сообщения: Как подключиться к Ингео из VB.NET |
|
|
Здравствуйте!
возможно ли подключиться к приложению Ингео из внешней программы, написанной на VB.NET 2003?
Сейчас делаю так:
в Reference добавил COM библиотеку Ингео
пытаюсь создать соединение
Dim ingeoApp As Object = CreateObject("Ingeo.IngeoApplication")
и возникает исключение
успешно проходит операция
Dim mx As Object = CreateObject("IngeoMapX.IngeoMapXControl")
и mx не пустой
что я делаю не так? |
|
Вернуться к началу |
|
 |
Воинов Вячеслав
Зарегистрирован: 04.06.2009 Сообщения: 1
|
Добавлено: Чт 04 Июн 2009 13:14 Заголовок сообщения: |
|
|
если ИнГео активно, то можно попробовать вот так
System.Runtime.InteropServices.Marshal.GetActiveObject(progID) |
|
Вернуться к началу |
|
 |
АлексейЛ
Зарегистрирован: 03.06.2009 Сообщения: 6
|
Добавлено: Чт 04 Июн 2009 13:41 Заголовок сообщения: |
|
|
не помогает
подозреваю, что проблема в том, что неверно указываю progID
в реестре нет объекта с clsid Ingeo.IngeoApplication |
|
Вернуться к началу |
|
 |
Михаил Власов

Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
|
Добавлено: Чт 04 Июн 2009 14:37 Заголовок сообщения: |
|
|
Пример на C#:
Код: | [DllImport("oleaut32.dll", PreserveSig = false)]
private static extern void GetActiveObject(ref Guid rclsid, IntPtr reserved, [MarshalAs(UnmanagedType.Interface)] out object ppunk);
public static object GetActiveIngeo()
{
Guid ingeoClsId = new Guid("{04088492-0485-11D4-9719-000021C6D845}");
object ingeo;
GetActiveObject(ref ingeoClsId, IntPtr.Zero, out ingeo);
return ingeo;
} |
_________________ С уважением, Михаил Власов. |
|
Вернуться к началу |
|
 |
Михаил Власов

Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
 |
Кузнецова Татьяна
Зарегистрирован: 23.09.2009 Сообщения: 2 Откуда: Рязань
|
Добавлено: Ср 23 Сен 2009 14:01 Заголовок сообщения: |
|
|
Использую код
public IngeoApplication GetActiveIngeo()
{
IntPtr ppunk;
Guid rclsid = new Guid("{09EFE6F8-BDB7-486B-9874-4BF30B561A8C}");
GetActiveObject(ref rclsid, IntPtr.Zero, out ppunk);
if (ppunk.ToInt32() != 0) return Marshal.GetObjectForIUnknown(ppunk) as IngeoApplication;
else return null;
}
Программа на VS 2008, но почему то ppunk всегда пусть. Подскажите в чем причина, иожет еще что-то надо сделать? |
|
Вернуться к началу |
|
 |
Алексей В. Бастриков
Зарегистрирован: 02.06.2008 Сообщения: 118 Откуда: ООО "Инфопроект", г. Екатеринбург
|
Добавлено: Ср 23 Сен 2009 16:52 Заголовок сообщения: |
|
|
Откуда берете GUID? Мне кажется вы не тот используете...  |
|
Вернуться к началу |
|
 |
Кузнецова Татьяна
Зарегистрирован: 23.09.2009 Сообщения: 2 Откуда: Рязань
|
Добавлено: Ср 23 Сен 2009 18:45 Заголовок сообщения: |
|
|
Алексей В. Бастриков писал(а): | Откуда берете GUID? Мне кажется вы не тот используете...  |
Все спасибо, вопрос решился, брали GUID базы данных  |
|
Вернуться к началу |
|
 |
Алексей В. Бастриков
Зарегистрирован: 02.06.2008 Сообщения: 118 Откуда: ООО "Инфопроект", г. Екатеринбург
|
Добавлено: Пт 04 Дек 2009 10:57 Заголовок сообщения: |
|
|
GUID для подключения к ИнГЕО можно получить следующим образм:
System.Guid GUID;
string StartupPath = System.Windows.Forms.Application.StartupPath;
string IngeoAssemblyPath = StartupPath + "\\Interop.Ingeo.dll";
System.Reflection.Assembly IngeoAssembly = System.Reflection.Assembly.LoadFile(IngeoAssemblyPath);
System.Type IngeoAppClass = IngeoAssembly.GetType("Ingeo.IngeoApplicationClass");
GUID = IngeoAppClass.GUID; |
|
Вернуться к началу |
|
 |
|