<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic C++&amp;nbsp; ArcMap-Addin: An unhandled win32 exception occurred in ArcMap.exe in ArcObjects SDK Questions</title>
    <link>https://community.esri.com/t5/arcobjects-sdk-questions/c-nbsp-arcmap-addin-an-unhandled-win32-exception/m-p/192072#M4993</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi everyone,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have developed an ArcMap add-in (COM/ATL-Application written in C++). This add-in reads IMG-files (Erdas Imagine format), does some calculations and writes new IMG-files. Optionally the new IMG-files can be visualized in ArcMap.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Sometimes after closing the add-in and closing ArcMap I get the Message "An unhandled win32 exception occurred in ArcMap.exe" from Visual Studio Debugger. I monitored this only when visualizing the map in ArcMap and if the add-in was built in&amp;nbsp; release mode. No exception occour if the add-in was build in debug mode.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In environments without Visual Studio, I monitor that the ArcMap.exe prozess doesn't disappear after closing ArcMap (instead of the exception message above).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In Method ShowDistibutionMap the variable HRESULT hr is everytime S_OK.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The error is not solid reproducable.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm using&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- Visual Studio 2005 Professional Edition&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- ArcGIS Desktop 9.2.0.1324 with ArcGIS Service Pack: 6 (build 9.2.6.1500)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- C++&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What is the cause of the exceptions? How can I avoid it?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any help would be greatly appreciated.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Rainer&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;
HRESULT CRasterUtil::ShowDistibutionMap( 
 const CString&amp;amp; sRasterFile, 
 const char* pTableFile,
 IRasterLayer* pRasterLayer
 )
{
 if ( !PathFileExists( sRasterFile ) )
&amp;nbsp; return S_FALSE;

 CSplitPath sp( sRasterFile );
 CString sPath&amp;nbsp; = sp.GetDrive() + sp.GetDirectory();
 CString sFile&amp;nbsp;&amp;nbsp;&amp;nbsp; = sp.GetFileName() + sp.GetExtension();
 CString sTmpFile = sPath + sp.GetFileName() + "_at oll" + sp.GetExtension(); 
 
 if ( PathFileExists( sTmpFile ) )
&amp;nbsp; remove( sTmpFile );
 
 IWorkspaceFactoryPtr ipWkspFac(CLSID_RasterWorkspaceFactory);
 
 //Open Workspace
 IWorkspacePtr ipWksp;
 HRESULT hr = ipWkspFac-&amp;gt;OpenFromFile(sPath.AllocSysString(), 0, &amp;amp;ipWksp);

 // Open the Geo file dataset
&amp;nbsp;&amp;nbsp; IRasterDatasetPtr pGeoDataset;
&amp;nbsp;&amp;nbsp; hr = ((IRasterWorkspacePtr) ipWksp)-&amp;gt;OpenRasterDataset(sFile.AllocSysString(),&amp;amp;pGeoDataset); 
 
 //IRasterLayerPtr pRasterLayer(CLSID_RasterLayer);
 
 hr = pRasterLayer-&amp;gt;CreateFromDataset(pGeoDataset);

 IRasterPtr pRaster;
 hr = pRasterLayer-&amp;gt;get_Raster( &amp;amp;pRaster );

 IRasterPropsPtr sRasterProp( pRaster );

 double dSizeX;
 double dSizeY;
 getCellSize(sRasterProp, dSizeX, dSizeY);

 double dFactor = 1;
 if( m_normalizeTrafficVolume )
 {
&amp;nbsp; double cp2 = 2.;
&amp;nbsp; double dFac = 1000. / dSizeX;
&amp;nbsp; dFactor = pow(dFac, cp2);
 }

 HISTODATA* pHisto = GetHistogram(pTableFile);
 if ( pHisto == NULL)
&amp;nbsp; return S_FALSE;

 SAFEARRAYBOUND rgsabound;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _variant_t&amp;nbsp; var;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _variant_t Array;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rgsabound.lLbound = 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rgsabound.cElements = pHisto-&amp;gt;lCount;

 // Equivalent to: Dim aiNew(1 To 8) As Double.
 SAFEARRAY *pDoubleArray = SafeArrayCreate(VT_R8, 1, &amp;amp;rgsabound);
 if( !pDoubleArray )
&amp;nbsp; return S_FALSE;

 SAFEARRAY *pLongArray = SafeArrayCreate(VT_UI4, 1, &amp;amp;rgsabound);
 if( !pLongArray )
&amp;nbsp; return S_FALSE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
 for (long i=0; i&amp;lt;pHisto-&amp;gt;lCount; i++)
&amp;nbsp; {
&amp;nbsp; double dVal = pHisto-&amp;gt;pValue&lt;I&gt; * dFactor;
&amp;nbsp; SafeArrayPutElement(pDoubleArray, &amp;amp;i, (void *)&amp;amp;dVal ); //&amp;amp;pHisto-&amp;gt;pValue&lt;I&gt;);
&amp;nbsp; SafeArrayPutElement(pLongArray, &amp;amp;i, (void *)&amp;amp;pHisto-&amp;gt;pFrequence&lt;I&gt;);
&amp;nbsp; }

 //Delete the data struct
 if ( pHisto )
&amp;nbsp; {
&amp;nbsp; if ( pHisto-&amp;gt;pFrequence )
&amp;nbsp;&amp;nbsp; delete pHisto-&amp;gt;pFrequence;
&amp;nbsp; if ( pHisto-&amp;gt;pValue )
&amp;nbsp;&amp;nbsp; delete pHisto-&amp;gt;pValue;
&amp;nbsp; delete pHisto;
&amp;nbsp; }

 VARIANT sValues;
 VariantInit(&amp;amp;sValues);
 sValues.vt = VT_ARRAY|VT_R8;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sValues.parray = pDoubleArray;

 VARIANT sFrequence;
 VariantInit(&amp;amp;sFrequence);
 sFrequence.vt = VT_ARRAY|VT_UI4;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sFrequence.parray = pLongArray;
&amp;nbsp; 
 if ( m_StatusBar )
&amp;nbsp; {
&amp;nbsp; hr = m_StatusBar-&amp;gt;put_Message(0, L"Preparing distribution map for Atoll..."); 
&amp;nbsp; hr = m_StatusBar-&amp;gt;put_Visible(VARIANT_TRUE);
&amp;nbsp; }

 IRasterBandCollectionPtr pRasterCol(pRaster);

// Create classfy renderer and QI RasterRenderer interface
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRasterClassifyColorRampRendererPtr pClassRen(CLSID_RasterClassifyColorRampRenderer);
 IRasterRendererPtr pRasRen = pClassRen;
 hr = pRasRen-&amp;gt;putref_Raster( pRaster );
 hr = pRasRen-&amp;gt;Update();

//&amp;nbsp; To set classification method, we need to get the histogram of the
//&amp;nbsp; raster. To simplify the sample, we only consider a raster that has
//&amp;nbsp; a table.
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
 if ( m_StatusBar )
&amp;nbsp; {
&amp;nbsp; hr = m_StatusBar-&amp;gt;put_Message(0, L"Prepare distribution map for Atoll..."); 
&amp;nbsp; hr = m_StatusBar-&amp;gt;put_Visible(VARIANT_TRUE);
&amp;nbsp; }

 IRasterBandCollectionPtr pBandCol( pRaster ); 

 IEnumRasterBandPtr pEnumRasterBand;
 hr = pRasterCol-&amp;gt;get_Bands(&amp;amp;pEnumRasterBand);

 IRasterBandPtr pRasBand;
 hr = pEnumRasterBand-&amp;gt;Next( &amp;amp;pRasBand );

 BSTR sField = L"Value [Erlang/qkm]";
 double dMax = 0.;

 IClassifyPtr pClassify(CLSID_Quantile); //EqualInterval);

//&amp;nbsp; Create EqualInterval classification and obtain the UID
 //hr = pClassify-&amp;gt;SetHistogramData( vValues, vFrequences); 
 hr = pClassify-&amp;gt;SetHistogramData( sValues, sFrequence); 
 
 int NumOfClass = 20; //5;
 hr = pClassify-&amp;gt;Classify( &amp;amp;NumOfClass ); 

 VARIANT ClassBreak; 
 hr = pClassify-&amp;gt;get_ClassBreaks( &amp;amp;ClassBreak );
 
 double *clsBreaks; // Pointer to double elements
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SafeArrayAccessData(ClassBreak.parray, (void**) &amp;amp;clsBreaks);

 IUIDPtr ipUID;
 hr = pClassify-&amp;gt;get_ClassID( &amp;amp;ipUID );
 
// Using IRasterClassifyUIProperties to set classification method to
// the raster classify render. If it is not set, NatrualBreak
//&amp;nbsp; classification will be used&amp;nbsp; 

 IRasterClassifyUIPropertiesPtr pClassProp (pClassRen);
 hr = pClassProp-&amp;gt;putref_ClassificationMethod( ipUID );

// Set raster classify renderer
 hr = pClassRen-&amp;gt;put_ClassCount( NumOfClass );
 hr = pClassRen-&amp;gt;put_ClassField( sField );
&amp;nbsp; 
 for (int i=0; i&amp;lt;NumOfClass; i++)&amp;nbsp; 
&amp;nbsp; double dval = clsBreaks&lt;I&gt;;

 hr = pClassRen-&amp;gt;put_Break(0, 0);
 //for (int i=2; i&amp;lt;NumOfClass; i++)
 for (int i=0; i&amp;lt;NumOfClass; i++)
&amp;nbsp; hr = pClassRen-&amp;gt;put_Break(i+1, clsBreaks&lt;I&gt;); //*dFACTOR);
 

// Create a color ramp to use
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IAlgorithmicColorRampPtr ipRamp(CLSID_AlgorithmicColorRamp);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
 IRgbColorPtr pStartColor(CLSID_RgbColor);
 hr = pStartColor-&amp;gt;put_Red(0);
 hr = pStartColor-&amp;gt;put_Blue(255);
 hr = pStartColor-&amp;gt;put_Green(0); 

 hr = ipRamp-&amp;gt;put_FromColor(pStartColor); 

 IRgbColorPtr pEndColor(CLSID_RgbColor);
 hr = pEndColor-&amp;gt;put_Red(0);
 hr = pEndColor-&amp;gt;put_Blue(0);
 hr = pEndColor-&amp;gt;put_Green(255); 

 hr = ipRamp-&amp;gt;put_ToColor( pEndColor );
 
 long lCount = NumOfClass; //256;
 hr = ipRamp-&amp;gt;put_Size( lCount );

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VARIANT_BOOL ok;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = ipRamp-&amp;gt;CreateRamp(&amp;amp;ok);

// Create symbol for the classes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IFillSymbolPtr ipFSymbol(CLSID_SimpleFillSymbol);
 ISymbolPtr ipSymbol(ipFSymbol);

 IEnumColorsPtr pEnumColors;
 hr = ipRamp-&amp;gt;get_Colors ( &amp;amp;pEnumColors );

 IRgbColorPtr pColorStart(CLSID_RgbColor);
 hr = pColorStart-&amp;gt;put_Red(255);
 hr = pColorStart-&amp;gt;put_Blue(255);
 hr = pColorStart-&amp;gt;put_Green(255); 

 IRgbColorPtr pRedColor(CLSID_RgbColor);
 hr = pRedColor-&amp;gt;put_Red(255);
 hr = pRedColor-&amp;gt;put_Blue(0);
 hr = pRedColor-&amp;gt;put_Green(0); 

 IColorPtr pColor;
 for (int i=0; i&amp;lt;lCount; i++)
&amp;nbsp; {
&amp;nbsp; hr = pEnumColors-&amp;gt;Next ( &amp;amp;pColor );
&amp;nbsp; 
&amp;nbsp; if ( i == 0)
&amp;nbsp;&amp;nbsp; hr = ipFSymbol-&amp;gt;put_Color( pColorStart );
&amp;nbsp; else if ( i == (lCount - 1) )
&amp;nbsp;&amp;nbsp; hr = ipFSymbol-&amp;gt;put_Color( pRedColor );
&amp;nbsp; else
&amp;nbsp;&amp;nbsp; hr = ipFSymbol-&amp;gt;put_Color( pColor );

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = pClassRen-&amp;gt;put_Symbol(i, ipSymbol);

&amp;nbsp; double dIntervalEnd = 0.;
&amp;nbsp; if ( i )&amp;nbsp; 
&amp;nbsp;&amp;nbsp; dIntervalEnd = (i == (lCount - 1)) ? dMax : clsBreaks[i + 1]; //*dFACTOR;
&amp;nbsp; 
&amp;nbsp; _bstr_t bstrClsBreaksBegin(clsBreaks&lt;I&gt;); //*dFACTOR);&amp;nbsp; // i==1 ? 1 : clsBreaks&lt;I&gt;*dFACTOR);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _bstr_t bstrClsBreaksEnd(dIntervalEnd);

&amp;nbsp; if ( i )
&amp;nbsp;&amp;nbsp; bstrClsBreaksBegin += CComBSTR(L" - ") + bstrClsBreaksEnd;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; hr = pClassRen-&amp;gt;put_Label(i,&amp;nbsp; bstrClsBreaksBegin.Detach());
 
&amp;nbsp; }

// Update the renderer and plug into layer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = pRasRen-&amp;gt;Update();
 hr = pRasterLayer-&amp;gt;putref_Renderer( pRasRen );

 // Save img as layer
 CString sLayerFile(sRasterFile);
 sLayerFile.Append(".lyr");

 if ( PathFileExists( sLayerFile ) )
&amp;nbsp; remove( sLayerFile );

 IGxLayerPtr pGxLayer(CLSID_GxLayer);
 IGxFilePtr pFile(pGxLayer);
 
 hr = pFile-&amp;gt;put_Path( sLayerFile.AllocSysString() );
 
 hr = pGxLayer-&amp;gt;putref_Layer( pRasterLayer );

 return hr;

}
&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 20 May 2010 07:01:55 GMT</pubDate>
    <dc:creator>RainerStarke</dc:creator>
    <dc:date>2010-05-20T07:01:55Z</dc:date>
    <item>
      <title>C++  ArcMap-Addin: An unhandled win32 exception occurred in ArcMap.exe</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/c-nbsp-arcmap-addin-an-unhandled-win32-exception/m-p/192072#M4993</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi everyone,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I have developed an ArcMap add-in (COM/ATL-Application written in C++). This add-in reads IMG-files (Erdas Imagine format), does some calculations and writes new IMG-files. Optionally the new IMG-files can be visualized in ArcMap.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Sometimes after closing the add-in and closing ArcMap I get the Message "An unhandled win32 exception occurred in ArcMap.exe" from Visual Studio Debugger. I monitored this only when visualizing the map in ArcMap and if the add-in was built in&amp;nbsp; release mode. No exception occour if the add-in was build in debug mode.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In environments without Visual Studio, I monitor that the ArcMap.exe prozess doesn't disappear after closing ArcMap (instead of the exception message above).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In Method ShowDistibutionMap the variable HRESULT hr is everytime S_OK.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The error is not solid reproducable.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm using&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- Visual Studio 2005 Professional Edition&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- ArcGIS Desktop 9.2.0.1324 with ArcGIS Service Pack: 6 (build 9.2.6.1500)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;- C++&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What is the cause of the exceptions? How can I avoid it?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any help would be greatly appreciated.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Rainer&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;
HRESULT CRasterUtil::ShowDistibutionMap( 
 const CString&amp;amp; sRasterFile, 
 const char* pTableFile,
 IRasterLayer* pRasterLayer
 )
{
 if ( !PathFileExists( sRasterFile ) )
&amp;nbsp; return S_FALSE;

 CSplitPath sp( sRasterFile );
 CString sPath&amp;nbsp; = sp.GetDrive() + sp.GetDirectory();
 CString sFile&amp;nbsp;&amp;nbsp;&amp;nbsp; = sp.GetFileName() + sp.GetExtension();
 CString sTmpFile = sPath + sp.GetFileName() + "_at oll" + sp.GetExtension(); 
 
 if ( PathFileExists( sTmpFile ) )
&amp;nbsp; remove( sTmpFile );
 
 IWorkspaceFactoryPtr ipWkspFac(CLSID_RasterWorkspaceFactory);
 
 //Open Workspace
 IWorkspacePtr ipWksp;
 HRESULT hr = ipWkspFac-&amp;gt;OpenFromFile(sPath.AllocSysString(), 0, &amp;amp;ipWksp);

 // Open the Geo file dataset
&amp;nbsp;&amp;nbsp; IRasterDatasetPtr pGeoDataset;
&amp;nbsp;&amp;nbsp; hr = ((IRasterWorkspacePtr) ipWksp)-&amp;gt;OpenRasterDataset(sFile.AllocSysString(),&amp;amp;pGeoDataset); 
 
 //IRasterLayerPtr pRasterLayer(CLSID_RasterLayer);
 
 hr = pRasterLayer-&amp;gt;CreateFromDataset(pGeoDataset);

 IRasterPtr pRaster;
 hr = pRasterLayer-&amp;gt;get_Raster( &amp;amp;pRaster );

 IRasterPropsPtr sRasterProp( pRaster );

 double dSizeX;
 double dSizeY;
 getCellSize(sRasterProp, dSizeX, dSizeY);

 double dFactor = 1;
 if( m_normalizeTrafficVolume )
 {
&amp;nbsp; double cp2 = 2.;
&amp;nbsp; double dFac = 1000. / dSizeX;
&amp;nbsp; dFactor = pow(dFac, cp2);
 }

 HISTODATA* pHisto = GetHistogram(pTableFile);
 if ( pHisto == NULL)
&amp;nbsp; return S_FALSE;

 SAFEARRAYBOUND rgsabound;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _variant_t&amp;nbsp; var;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _variant_t Array;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rgsabound.lLbound = 1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rgsabound.cElements = pHisto-&amp;gt;lCount;

 // Equivalent to: Dim aiNew(1 To 8) As Double.
 SAFEARRAY *pDoubleArray = SafeArrayCreate(VT_R8, 1, &amp;amp;rgsabound);
 if( !pDoubleArray )
&amp;nbsp; return S_FALSE;

 SAFEARRAY *pLongArray = SafeArrayCreate(VT_UI4, 1, &amp;amp;rgsabound);
 if( !pLongArray )
&amp;nbsp; return S_FALSE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
 for (long i=0; i&amp;lt;pHisto-&amp;gt;lCount; i++)
&amp;nbsp; {
&amp;nbsp; double dVal = pHisto-&amp;gt;pValue&lt;I&gt; * dFactor;
&amp;nbsp; SafeArrayPutElement(pDoubleArray, &amp;amp;i, (void *)&amp;amp;dVal ); //&amp;amp;pHisto-&amp;gt;pValue&lt;I&gt;);
&amp;nbsp; SafeArrayPutElement(pLongArray, &amp;amp;i, (void *)&amp;amp;pHisto-&amp;gt;pFrequence&lt;I&gt;);
&amp;nbsp; }

 //Delete the data struct
 if ( pHisto )
&amp;nbsp; {
&amp;nbsp; if ( pHisto-&amp;gt;pFrequence )
&amp;nbsp;&amp;nbsp; delete pHisto-&amp;gt;pFrequence;
&amp;nbsp; if ( pHisto-&amp;gt;pValue )
&amp;nbsp;&amp;nbsp; delete pHisto-&amp;gt;pValue;
&amp;nbsp; delete pHisto;
&amp;nbsp; }

 VARIANT sValues;
 VariantInit(&amp;amp;sValues);
 sValues.vt = VT_ARRAY|VT_R8;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sValues.parray = pDoubleArray;

 VARIANT sFrequence;
 VariantInit(&amp;amp;sFrequence);
 sFrequence.vt = VT_ARRAY|VT_UI4;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sFrequence.parray = pLongArray;
&amp;nbsp; 
 if ( m_StatusBar )
&amp;nbsp; {
&amp;nbsp; hr = m_StatusBar-&amp;gt;put_Message(0, L"Preparing distribution map for Atoll..."); 
&amp;nbsp; hr = m_StatusBar-&amp;gt;put_Visible(VARIANT_TRUE);
&amp;nbsp; }

 IRasterBandCollectionPtr pRasterCol(pRaster);

// Create classfy renderer and QI RasterRenderer interface
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRasterClassifyColorRampRendererPtr pClassRen(CLSID_RasterClassifyColorRampRenderer);
 IRasterRendererPtr pRasRen = pClassRen;
 hr = pRasRen-&amp;gt;putref_Raster( pRaster );
 hr = pRasRen-&amp;gt;Update();

//&amp;nbsp; To set classification method, we need to get the histogram of the
//&amp;nbsp; raster. To simplify the sample, we only consider a raster that has
//&amp;nbsp; a table.
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
 if ( m_StatusBar )
&amp;nbsp; {
&amp;nbsp; hr = m_StatusBar-&amp;gt;put_Message(0, L"Prepare distribution map for Atoll..."); 
&amp;nbsp; hr = m_StatusBar-&amp;gt;put_Visible(VARIANT_TRUE);
&amp;nbsp; }

 IRasterBandCollectionPtr pBandCol( pRaster ); 

 IEnumRasterBandPtr pEnumRasterBand;
 hr = pRasterCol-&amp;gt;get_Bands(&amp;amp;pEnumRasterBand);

 IRasterBandPtr pRasBand;
 hr = pEnumRasterBand-&amp;gt;Next( &amp;amp;pRasBand );

 BSTR sField = L"Value [Erlang/qkm]";
 double dMax = 0.;

 IClassifyPtr pClassify(CLSID_Quantile); //EqualInterval);

//&amp;nbsp; Create EqualInterval classification and obtain the UID
 //hr = pClassify-&amp;gt;SetHistogramData( vValues, vFrequences); 
 hr = pClassify-&amp;gt;SetHistogramData( sValues, sFrequence); 
 
 int NumOfClass = 20; //5;
 hr = pClassify-&amp;gt;Classify( &amp;amp;NumOfClass ); 

 VARIANT ClassBreak; 
 hr = pClassify-&amp;gt;get_ClassBreaks( &amp;amp;ClassBreak );
 
 double *clsBreaks; // Pointer to double elements
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SafeArrayAccessData(ClassBreak.parray, (void**) &amp;amp;clsBreaks);

 IUIDPtr ipUID;
 hr = pClassify-&amp;gt;get_ClassID( &amp;amp;ipUID );
 
// Using IRasterClassifyUIProperties to set classification method to
// the raster classify render. If it is not set, NatrualBreak
//&amp;nbsp; classification will be used&amp;nbsp; 

 IRasterClassifyUIPropertiesPtr pClassProp (pClassRen);
 hr = pClassProp-&amp;gt;putref_ClassificationMethod( ipUID );

// Set raster classify renderer
 hr = pClassRen-&amp;gt;put_ClassCount( NumOfClass );
 hr = pClassRen-&amp;gt;put_ClassField( sField );
&amp;nbsp; 
 for (int i=0; i&amp;lt;NumOfClass; i++)&amp;nbsp; 
&amp;nbsp; double dval = clsBreaks&lt;I&gt;;

 hr = pClassRen-&amp;gt;put_Break(0, 0);
 //for (int i=2; i&amp;lt;NumOfClass; i++)
 for (int i=0; i&amp;lt;NumOfClass; i++)
&amp;nbsp; hr = pClassRen-&amp;gt;put_Break(i+1, clsBreaks&lt;I&gt;); //*dFACTOR);
 

// Create a color ramp to use
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IAlgorithmicColorRampPtr ipRamp(CLSID_AlgorithmicColorRamp);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
 IRgbColorPtr pStartColor(CLSID_RgbColor);
 hr = pStartColor-&amp;gt;put_Red(0);
 hr = pStartColor-&amp;gt;put_Blue(255);
 hr = pStartColor-&amp;gt;put_Green(0); 

 hr = ipRamp-&amp;gt;put_FromColor(pStartColor); 

 IRgbColorPtr pEndColor(CLSID_RgbColor);
 hr = pEndColor-&amp;gt;put_Red(0);
 hr = pEndColor-&amp;gt;put_Blue(0);
 hr = pEndColor-&amp;gt;put_Green(255); 

 hr = ipRamp-&amp;gt;put_ToColor( pEndColor );
 
 long lCount = NumOfClass; //256;
 hr = ipRamp-&amp;gt;put_Size( lCount );

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VARIANT_BOOL ok;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = ipRamp-&amp;gt;CreateRamp(&amp;amp;ok);

// Create symbol for the classes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IFillSymbolPtr ipFSymbol(CLSID_SimpleFillSymbol);
 ISymbolPtr ipSymbol(ipFSymbol);

 IEnumColorsPtr pEnumColors;
 hr = ipRamp-&amp;gt;get_Colors ( &amp;amp;pEnumColors );

 IRgbColorPtr pColorStart(CLSID_RgbColor);
 hr = pColorStart-&amp;gt;put_Red(255);
 hr = pColorStart-&amp;gt;put_Blue(255);
 hr = pColorStart-&amp;gt;put_Green(255); 

 IRgbColorPtr pRedColor(CLSID_RgbColor);
 hr = pRedColor-&amp;gt;put_Red(255);
 hr = pRedColor-&amp;gt;put_Blue(0);
 hr = pRedColor-&amp;gt;put_Green(0); 

 IColorPtr pColor;
 for (int i=0; i&amp;lt;lCount; i++)
&amp;nbsp; {
&amp;nbsp; hr = pEnumColors-&amp;gt;Next ( &amp;amp;pColor );
&amp;nbsp; 
&amp;nbsp; if ( i == 0)
&amp;nbsp;&amp;nbsp; hr = ipFSymbol-&amp;gt;put_Color( pColorStart );
&amp;nbsp; else if ( i == (lCount - 1) )
&amp;nbsp;&amp;nbsp; hr = ipFSymbol-&amp;gt;put_Color( pRedColor );
&amp;nbsp; else
&amp;nbsp;&amp;nbsp; hr = ipFSymbol-&amp;gt;put_Color( pColor );

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = pClassRen-&amp;gt;put_Symbol(i, ipSymbol);

&amp;nbsp; double dIntervalEnd = 0.;
&amp;nbsp; if ( i )&amp;nbsp; 
&amp;nbsp;&amp;nbsp; dIntervalEnd = (i == (lCount - 1)) ? dMax : clsBreaks[i + 1]; //*dFACTOR;
&amp;nbsp; 
&amp;nbsp; _bstr_t bstrClsBreaksBegin(clsBreaks&lt;I&gt;); //*dFACTOR);&amp;nbsp; // i==1 ? 1 : clsBreaks&lt;I&gt;*dFACTOR);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _bstr_t bstrClsBreaksEnd(dIntervalEnd);

&amp;nbsp; if ( i )
&amp;nbsp;&amp;nbsp; bstrClsBreaksBegin += CComBSTR(L" - ") + bstrClsBreaksEnd;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; hr = pClassRen-&amp;gt;put_Label(i,&amp;nbsp; bstrClsBreaksBegin.Detach());
 
&amp;nbsp; }

// Update the renderer and plug into layer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = pRasRen-&amp;gt;Update();
 hr = pRasterLayer-&amp;gt;putref_Renderer( pRasRen );

 // Save img as layer
 CString sLayerFile(sRasterFile);
 sLayerFile.Append(".lyr");

 if ( PathFileExists( sLayerFile ) )
&amp;nbsp; remove( sLayerFile );

 IGxLayerPtr pGxLayer(CLSID_GxLayer);
 IGxFilePtr pFile(pGxLayer);
 
 hr = pFile-&amp;gt;put_Path( sLayerFile.AllocSysString() );
 
 hr = pGxLayer-&amp;gt;putref_Layer( pRasterLayer );

 return hr;

}
&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 20 May 2010 07:01:55 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/c-nbsp-arcmap-addin-an-unhandled-win32-exception/m-p/192072#M4993</guid>
      <dc:creator>RainerStarke</dc:creator>
      <dc:date>2010-05-20T07:01:55Z</dc:date>
    </item>
  </channel>
</rss>

