One can normally host a WPF control in MFC using teh Interop described in like http://weblogs.thinktecture.com/cnagel/2010/04/mfc-and-wpf-interop.html. When I try this I get an exception in RuntimeCoreNet.GeneratedWrappers.CoreWrapperBase. It appears that the .NET Runtime assumes there is some XAML to initialise the control. Has anyone successfully hosted a Runtime MapView in an MFC application?
HWND GetHwnd(HWND parent, int x, int y, int width, int height)
System::Windows::Interop::HwndSourceParameters^ sourceParams = gcnew System::Windows::Interop::HwndSourceParameters("MFCWPFApp");
sourceParams->PositionX = x;
sourceParams->PositionY = y;
sourceParams->Height = height;
sourceParams->Width = width;
sourceParams->ParentWindow = IntPtr(parent);
sourceParams->WindowStyle = WS_VISIBLE | WS_CHILD;
Globals::gHwndSource = gcnew System::Windows::Interop::HwndSource(*sourceParams);
Globals::gwcMapView = gcnew Esri::ArcGISRuntime::UI::Controls::MapView; // Fails here with
// Additional information : The type initializer for 'RuntimeCoreNet.GeneratedWrappers.CoreWrapperBase' threw an exception.
FrameworkElement^ myPage = Globals::gwcMapView;
Globals::gHwndSource->RootVisual = myPage;
Only some were copied. I now have a complete set and I can create a blank MapView in a dialog.
However, I can't create a Map or a Raster as I would expect using code like this (using namespace Esri::ArcGISRuntime)
Mapping::Map^ myMap = gcnew Mapping::Map(Mapping::Basemap::CreateStreets());
Globals::gwcMapView->Map = myMap;
Globals::myRaster = gcnew Rasters::Raster("E:\\Raw_Mapping\\Tif\\rgb\\Brisbane_Raster_250_RGB.tif");
Mapping::RasterLayer^ rasterLayer = gcnew Mapping::RasterLayer(Globals::myRaster);
In both cases the error is this (in the Map case)
1>BBTest_MFCDlg.cpp(59): error C3252: 'RuntimeCoreNet::GeneratedWrappers::CoreWrapperBase::Finalize': cannot reduce accessibility of a virtual method in a managed type
1> BBTest_MFCDlg.cpp(59): note: This diagnostic occurred while importing type 'RuntimeCoreNet::GeneratedWrappers::CoreWrapperBase ' from assembly 'Esri.ArcGISRuntime, Version=220.127.116.11, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86'.
1> BBTest_MFCDlg.cpp(59): note: This diagnostic occurred while importing type 'RuntimeCoreNet::GeneratedWrappers::CoreMap ' from assembly 'Esri.ArcGISRuntime, Version=18.104.22.168, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86'.
1> BBTest_MFCDlg.cpp(59): note: This diagnostic occurred while importing type 'Esri::ArcGISRuntime::Mapping::Map ' from assembly 'Esri.ArcGISRuntime, Version=22.214.171.124, Culture=neutral, PublicKeyToken=8fc3cc631e44ad86'.
Searching the web for error C3252 doesn't help, and the Map (and Raster) are public so shouldn't throw this error.
Any clues as to how to proceed?
I'm not sure what is the support situation with MFC and WPF based ArcGIS Runtime integration but it has never been tested at least. I'll check out what is the situation with that and get back to you.
It took a while to get to the bottom of this, but we are unfortunately not able to currently support use of our SDK within an MFC app. We have an ongoing thread with Microsoft on this issue. It appears it may be a compiler problem, or similar.