MFC

0 голосов
спросил 23 Июль, 07 от Kovalenko (1,020 баллов) в категории Программные продукты Esri
А у кого есть пример работающего приложения под MFC типа диалог.
Мне не удается прописать итерфейсі типа IMapControl2Ptr, а как результат контрол работает но получить объект типа Layer и прочее не выходит

14 Ответы

0 голосов
ответил 24 Июль, 07 от new_sergei1 (1,240 баллов)
Я как раз с этим работаю. Во-первых, тебе надо подключить библиотеки ArcObjects в свой проект - т.е. в файле StdAfx.h в конце должно быть написано следующее

#pragma warning(push)
#pragma warning(disable : 4192) /* Ignore warnings for types that are duplicated in win32 header files */
#pragma warning(disable : 4146) /* Ignore warnings for use of minus on unsigned types */

#import "\Program Files\ArcGIS\com\esriSystem.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids, exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE")
#import "\Program Files\ArcGIS\com\esriSystemUI.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriGeometry.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriDisplay.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriOutput.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriGeoDatabase.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriCarto.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids

// Some of the Engine controls
#import "\Program Files\ArcGIS\bin\TOCControl.ocx" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\bin\ToolbarControl.ocx" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\bin\MapControl.ocx" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\bin\PageLayoutControl.ocx" raw_interfaces_only, raw_native_types, no_namespace, named_guids

// additionally for 3D controls
#import "\Program Files\ArcGIS\com\esri3DAnalyst.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\com\esriGlobeCore.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\bin\SceneControl.ocx" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "\Program Files\ArcGIS\bin\GlobeControl.ocx" raw_interfaces_only, raw_native_types, no_namespace, named_guids

Если ты не используеш Pagelayout control и дригие контролы, то лучше их не подключать - чтобы компилятор не ругался.
А чтобы получить объект типа Layer тебе сначала надо получить объект IMap, а затем уже ILayer. Т.е. это должно выглядеть примерно так:

// m_mapcontrol - переменная, указывающая на MapControl

     IMapPtr ipMap = m_mapcontrol.GetMap();
     IActiveViewPtr ipActiveView = m_mapcontrol.GetActiveView();
     ILayerPtr ipLayer;

     ipMap->get_Layer(0, &ipLayer);
0 голосов
ответил 24 Июль, 07 от Kovalenko (1,020 баллов)
Проблема как раз вот в чем, я создаю в VisualStudio 5 проект типа MFC Diaolg вставляю MapControl,  LicenseControl и как описано в хелпе добавляю то, что ті віше написал. Но проект не компилится а відает кочу ошибок типа:
Error    8    error C3121: cannot change GUID for class 'ICommand'
Error    9    error C2011: 'IProgressDialog' : 'struct' type redefinition
и так далее, что я делаю не так?
В доке вообще нет ни чего конкретного.  

0 голосов
ответил 24 Июль, 07 от new_sergei1 (1,240 баллов)
Тут дело может быть в самой Visual Studio. Я, конечно уточню, но, по-мойму, официально esri обкатывает свои продукты на Visual Studio версии 6 и 2003. Если это возможно, то попробуй сделать проект в этих версиях
0 голосов
ответил 24 Июль, 07 от new_sergei1 (1,240 баллов)
Вот, что написано в хэлпе esri:"The compilers in Visual Studio 6.0 and Visual Studio .NET 2003 are supported by the ArcGIS C++ API". Хотя я где-то читал(может даже на этом форуме), что проекты из 2003 в 2005 перевести не проблема. Но, в любом случае, сразу на 2005 сделать, наверное, не получится.
0 голосов
ответил 24 Июль, 07 от Kovalenko (1,020 баллов)
Т.Е. по идеи я все делаю правильно? Пробовал подключать ArcSDK.h тоже глючит. 
0 голосов
ответил 24 Июль, 07 от new_sergei1 (1,240 баллов)
Получается, что да, правильно. А зачем тебе ArcSDK.h?
0 голосов
ответил 24 Июль, 07 от Kovalenko (1,020 баллов)
Да нет на сайте написано, рекомендуют пятую версию студии.
0 голосов
ответил 24 Июль, 07 от Kovalenko (1,020 баллов)
ArcSDK.h от безисходности:-)

0 голосов
ответил 24 Июль, 07 от new_sergei1 (1,240 баллов)
Вот ещё из хэлпа: " As an ArcGIS C++ API developer, you can choose any development environment. However, if you wish to use an integrated development environment (IDE), either Visual Studio 6.0 or Visual Studio .NET 2003 (7.1) is recommended. "
0 голосов
ответил 25 Июль, 07 от -3A- (5,220 баллов)
с exclude надо разбираться ;)
то есть, попробуй в exclude добавить имена интерфейсов, на которых начинается ругань (именно в ту строку, где это происходит)

у меня вот так без проблем работает под VS2005 :)


//import esriSystem.olb
#import "libid:5E1F7BC3-67C5-4AEE-8EC6-C4B73AAC42ED" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE", "VARTYPE")

//import esriGeometry.olb
#import "libid:C4B094C2-FF32-4FA1-ABCB-7820F8D6FB68" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_HANDLE", "OLE_COLOR", "ISegment")

//import esriDisplay.olb
#import "libid:59FCCD31-434C-4017-BDEF-DB4B7EDC9CE0" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_HANDLE", "OLE_COLOR")

//import esriGeoDatabase.olb
#import "libid:0475BDB1-E5B2-4CA2-9127-B4B1683E70C2" raw_interfaces_only raw_native_types no_namespace named_guids exclude("ICursor")

//import esriSystemUI.olb
#import "libid:4ECCA6E2-B16B-4ACA-BD17-E74CAE4C150A" raw_interfaces_only raw_native_types no_namespace named_guids exclude("IRow", "ICursor", "ICommand", "IProgressDialog")

//import esriCarto.olb
#import "libid:45AC68FF-DEFF-4884-B3A9-7D882EDCAEF1" raw_interfaces_only raw_native_types no_namespace named_guids exclude("UINT_PTR", "ITableDefinition")
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...