AddPushPin() throws exception in VC++

radboudp
01-18-2005, 07:29 AM
Hi,

I have a problem adding pushpins to a map using MS VC ++ 6.0. This is my code:

theApp.LockMapPointApp();

// Create a new pushpin object to represent the antenna:
pPin = new CPushpin;

// Open the MapPoint map...
// theApp.GetMapPointApp() returns a MapPoint.Application object...
theApp.GetMapPointApp().OpenMap( m_csMapPointFile, FALSE );

// Find the location where the antenna needs to be placed:
CLocation loc;
loc = theApp.GetMapPointApp().GetActiveMap().GetLocation ( dblLatitude, dblLongitude, 0 );

if ( bCenterOn )
// Center on the newly added pin...
loc.GoTo();

try
{
CMap1 map = theApp.GetMapPointApp().GetActiveMap();

// Add the pushpin and set the name (if any)...
if ( ! csName.IsEmpty() )
*pPin = map.AddPushpin( loc, csName );
else
*pPin = map.AddPushpin( loc, "<Nameless>" );
}
catch ( COleDispatchException *ex )
{
dwLastError = ::GetLastError();
iErrNo = errno;

ex->GetErrorMessage( szError, 1024 );
theApp.Log( LOG_MAP_ERROR, m_iId, _T("MapPoint OleDispatchException while adding PushPin: %s"), szError );
}

// Save the pushpin reference instance
...

// Do some settings...
...

theApp.UnlockMapPointApp();

--- End code ---

It is the "*pPin = map.AddPushpin( loc, csName );" line of code that throws the exception.

Any kind of help would be appreciated...

Many thanks,
Radboud

PS: Another application using a MappointControl object works just fine...

Winwaed
01-18-2005, 09:09 AM
I usually use MapPoint in C++ without MFC.

I assume csName is an MFC CString?

The problem might be because the COM interface is expecting its own flavour of string (eg. a BSTR), rather than a 'smart CString object'.

I've just looked at my code (non-MFC, and using STL), and I pass an STL string to a MapPoint method by converting it to a (const char*). When receiving data (ie. querying a field) I have to go via VARIANTs.

Note that your hard-coded string constants are also of type (const char*).


Richard

Anonymous
01-20-2005, 06:49 PM
Instead of define pPin as a pointer and allocate an object then reassign *pPin as you did.
==================
You would define

Pushpin JustPin;

JustPin = map.AddPushpin( loc, (LPCTSTR)csName );

=====================


Let me know if this helps.

 
Web mp2kmag.com
mapforums.com