ThinkGeo.com    |     Documentation    |     Premium Support

V9.0.0.23 - MSVCP110.dll is Missing

MapSuite Team,



I upgraded one of my applications from V8.0.0.68 to V9.0.0.23.  It compiles successfully, but when I run it I receive a popup that states:



        “The program can’t start because MSVCP110.dll is missing from your computer.  Try reinstalling the program to fix this problem”.



This dll is not in the SYSWOW64 Directory.



MapSuite V9 and past releases have included the following as part of the release:

    msvcp100.dll

    msvcp100d.dll

    msvcr100.dll

    msvcr100d.dll



Is the msvcp110.dll the only dll that will be needed or are there additional ones?



Where would I find the msvcp110.dll and any others that might be required?



I get this popup attempting to display a single tiff image in a GeoTiffRasterLayer.  The exception is encountered when attempting to invoke GetBoundingBox on the OverlayLayer after the GeoTiffRasterLayer has been added as a layer to the LayerOverlay.



Here are the instructions:

LayerOverlay TheOverlayRaster;

GeoTiffRasterLayer geoTiffRasterLayer;

                geoTiffRasterLayer = new GeoTiffRasterLayer();


                geoTiffRasterLayer.LibraryType = GeoTiffLibraryType.UnmanagedLibTiff;


                geoTiffRasterLayer.PathFilename = ThePath;


                TheOverlayRaster = new LayerOverlay();


                TheOverlayRaster.Layers.Add(geoTiffRasterLayer);


                wpfMap1.Overlays.Add(TheOverlayRaster);


                wpfMap1.CurrentExtent = TheOverlayRaster.GetBoundingBox();


Regards,

Dennis




Hi Dennis, 
  
 We contains msxxx100.dlls in our package is for make user easier if they don’t have related dlls in machine. 
  
 But it looks we hadn’t contained 110 and higher version dlls for new 9.0. 
  
 So please try to download it from here: microsoft.com/en-us/download/details.aspx?id=30679 
  
 Wish that’s helpful. 
  
 Regards, 
  
 Don

Don,



I downloaded the Visual Studio 2012 C++ Redistributable and installed.  I no longer receive the popup about missing dll’s.  However, an exception is thrown, as shown below.



The installed dll’s are listed below.  Are these the proper dll’s that MapSuite is expecting.



Again, I am attempting to display just one tif image.  The application works fine under V8.



Thanks,

Dennis



Directory of C:\Windows\SysWOW64


11/06/2012  02:20 AM           535,008 msvcp110.dll

09/11/2013  11:21 PM           501,872 msvcp110_clr0400.dll

11/06/2012  02:20 AM           875,472 msvcr110.dll

09/11/2013  11:21 PM           863,344 msvcr110_clr0400.dll

               4 File(s)      2,775,696 bytes






System.NotSupportedException was unhandled

  HResult=-2146233067

  Message=This Layer doesn’t have a boundingBox.

  Source=WpfDesktopEdition

  StackTrace:

       at ThinkGeo.MapSuite.WpfDesktopEdition.Tile.<>c__DisplayClass5.<DrawException>b__3()

       at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)

       at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

       at System.Windows.Threading.DispatcherOperation.InvokeImpl()

       at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)

       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

       at System.Windows.Threading.DispatcherOperation.Invoke()

       at System.Windows.Threading.Dispatcher.ProcessQueue()

       at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

       at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

       at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)

       at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)

       at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

       at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)

       at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)

       at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)

       at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)

       at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)

       at System.Windows.Threading.Dispatcher.Run()

       at System.Windows.Application.RunDispatcher(Object ignore)

       at System.Windows.Application.RunInternal(Window window)

       at System.Windows.Application.Run(Window window)

       at System.Windows.Application.Run()

       at OriStarRaster.App.Main() in C:\OriStarMappingInc\OriStarRaster\obj\x86\Release\App.g.cs:line 0

       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)

       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)

       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)

       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

       at System.Threading.ThreadHelper.ThreadStart()

  InnerException: 




Dennis,



The c++ runtime dlls you got are exactly what map suite expect if we specified UnmanagedLibTiff mode.



As for the NotSupport exception, as I know the GeoTiffRasterLayer supports getting boundingbox. I tried to open a tiff image and can get its boundingbox. What I noticed is looks like the exception is thrown from multi-thread, Can we make it simply to narrow this issue by:


        
  1. Try to wrap the codes into form loaded method.

  2.     
  3. Try to call get boundingbox from the layer rather than LayerOverlay. 


My test codes as below:


private void WpfMap_Loaded(object sender, RoutedEventArgs e)
        {
            Map1.MapUnit = GeographyUnit.DecimalDegree;
 
            GeoTiffRasterLayer geoTiffRasterLayer = new GeoTiffRasterLayer();
 
            geoTiffRasterLayer.LibraryType = GeoTiffLibraryType.UnmanagedLibTiff;
 
            geoTiffRasterLayer.PathFilename = @"D:\TestData\imageData\TerraColor_SanFrancisco_US_15m.tif";
 
            LayerOverlay TheOverlayRaster = new LayerOverlay();
 
            TheOverlayRaster.Layers.Add(geoTiffRasterLayer);
 
            Map1.Overlays.Add(TheOverlayRaster);
 
            geoTiffRasterLayer.Open();
            Map1.CurrentExtent = TheOverlayRaster.GetBoundingBox();
            Map1.Refresh(); 
        }





Thanks,



Troy

Troy,



For this application I am using V9.0.0.23, in case that makes a difference.



I modified the code so that my tif is created in the Window_Loaded Event.



The geoTiffRasterLayer.HasBoundingBox Property is set to false.



When geoTiffRasterLayer.Open() is invoked the following exception is thrown:

    Value cannot be null.\r\nParameter name: ptr



Then I modified the code so that in the Window_Loaded Event I attempt to GetBoundingBox from the LayerOverlay and that encounters an exception stating that the Layer does not have a bounding box.



Dennis








Dennis, there are several constructors for the GeoTiffRasterLayer.  One takes the path to your GeoTiff file and the other takes a path to your GeoTiff and another path to a file that describes the bounding box of the GeoTiff.  This file has an extension of .tfw.   



Based on my experience with this API, if you use the constructor that takes just the single parameter, which is the path to your GeoTiff, MapSuite will attempt to use the unmanaged dlls to load this, especially if you specify the GeoTiffLibraryType of UnmanagedLibTiff.  The dlls you are mentioning also play a part in this.



Otherwise, try creating the .tfw for this GeoTiff.    This is code from one of our applications that ran into a similar issue.




GeoTiffRasterLayer layer = null;
               //DOSEWIN-19: application will require .tfw 
               var theFileWorld = Path.ChangeExtension(geotiff.FilePath, "tfw");
               if (File.Exists(theFileWorld))
               {
                   layer = new GeoTiffRasterLayer(geotiff.FilePath);
               }
               else
               {
                   _loggerFacade.Warn("You have supplied a GeoTiff without its corresponding .tfw. " 
                   "This version of DoseWin does not support support loading GeoTiffs without .tfw."this);
                    
                   //// NOTE: leaving this in here for future consideration.
                   //layer = new GeoTiffRasterLayer(geotiff.FilePath)
                   //{
                   //    LibraryType = GeoTiffLibraryType.UnmanagedLibTiff
                   //};
 
                   layer = new GeoTiffRasterLayer();
               }


Troy,



My code worked perfectly fine under MapSuite V8.



I can’t understand why it will not work under V9.  Why would MapSuite change its’ DLL’s so my code is no longer supported?



Regards,

Dennis


Klaus/Troy,



Would you have code that will read a tif file and then create the corresponding tfw file?



Regards,

Dennis


Klaus,

Thanks for your assistance. I think you are pointing on the right direction that the world file(tfw) caused the issue. However, I still want to mention that there is a possible that we can read the geographic information out under UnmanageredLibTiff mode even no the world file., but we need to make sure the tiff file have to be a GEOTIFF file which includes the geographic tag. So, seems your codes can do some improvements for no world file case. 

Here are some links:



remotesensing.org/geotiff/faq.html#What is GeoTIFF and how is this different from TIFF?



Dennis,



As Klaus guess, map suite GeoTiffRasterLayer needs to read the geographic data from either the world file (.tfw) or single “GeoTiff” file. So, I guess the reason v8 works fine is because the data file is GeoTiff file but now the data file is just a plain tiff file without the geographic data. Would you mind to send us your tiff file so that we can check it out if it includes the geographic tag?



Here is also a link to convert the Tiff file and world file into a single GeoTiff file.

remotesensing.org/geotiff/faq.html#WorldFile2



Please let us know if any questions.



Thanks,



Troy

Troy/Klaus,



The files that I am attempting to load with V9 are the same exact files I am able to load under V8, which means that they are indeed GEOTIFF.



The file is 85MB so takes too much time to upload.



I can assure you that I am using GEOTIFF Files.



What code is required to load a GEOTIFF file under V9?



Thanks for your assistance.



Dennis

 


Troy/Klaus,



If you can provide a way to ftp my geotiff file to your site I would be happy to do that.



Dennis


Hi Dennis,



I am sorry as this proved a bug. I recreated the issue in a win7 machine with vs 2010 finally and we fixed the issue, please download and install Map Suite Unmanaged Dependencies 9.0.31.0 to fix it. After the installation, please make sure the GeoTiffX64.dll is updated:







ap.thinkgeo.com:5001/fbsharing/ewXn3m3u



Btw, with the fix, the c++ runtime lib like MSVCP110.dll is not required, which means “MSVCP110.dll is Missing” won’t happen with this fix.



Please let us know if the issue persists.



Thanks,



Troy

Troy,



My application now works with my GEOTIFF’s with V9.0.31.0!!!



Thanks so much for finding and fixing the bug.



Regards,

Dennis


Hi Dennis, 
  
 You are welcome and good to hear it works. Any other questions, don’t hesitate to let us know. 
  
 Thanks, 
  
 Troy