J
John Doe
Hi,
I wrote a small class to enumerate available networks on a smartphone :
class CNetwork
{
public:
CNetwork() {};
CNetwork(CString& netName, GUID netguid):
_netname(netName), _netguid(netguid) {}
~CNetwork() {}
CString& getName() { return _netname; }
GUID getGuid() { return _netguid; }
private:
CString _netname;
GUID _netguid;
};
class CNetworkList
{
public:
typedef std::list<CNetwork*>::iterator NetworkListIt;
CNetworkList() {}
~CNetworkList()
{
Clear();
}
CNetworkList::CNetworkList(const CNetworkList& rhs) {
CopyObj(rhs);
}
CNetworkList& CNetworkList:perator=(const CNetworkList& rhs)
{
CopyObj(rhs);
return *this;
}
void CopyObj(const CNetworkList& rhs)
{
_netlist = rhs._netlist;
}
void Clear()
{
for_each( _netlist.begin(), _netlist.end(), DeletePointer ());
}
void Add(CNetwork* network)
{
_netlist.push_back(network);
}
const CNetwork* getNetwork(CString netNameOrGuid)
{
if ((netNameOrGuid.GetAt(0) == '{') &&
netNameOrGuid.GetLength() == 39)
{
CLSID guid;
if
(SUCCEEDED(CLSIDFromString(netNameOrGuid.GetBuffer(),&guid)))
return getNetwork(guid);
}
else
{
NetworkListIt it;
for (it = _netlist.begin(); it != _netlist.end(); ++it)
if (!(*it)->getName().CompareNoCase(netNameOrGuid))
return (*it);
}
return NULL;
}
const CNetwork* getNetwork(CLSID guid)
{
if (!_netlist.empty())
Clear();
NetworkListIt it;
for (it = _netlist.begin(); it != _netlist.end(); ++it)
if ((*it)->getGuid() == guid)
return (*it);
return NULL;
}
private:
std::list<CNetwork*> _netlist;
};
CNetworkList getNetworkList()
{
int i = 0;
HRESULT hResult;
CNetworkList netList;
while( ConnMgrEnumDestinations( i, &connInfo ) == 0 )
{
CNetwork* pNetWork = new
CNetwork(CString(connInfo.szDescription), connInfo.guid);
if (pNetWork)
{
netList.Add(pNetWork);
}
i++;
}
}
When I call this code :
m_NetworkList = getNetworkList();
I got an assert in a Cstring desctructor so I suppose my class is doing
wrong...
When I debug in step by step I don't really understand the calls, it
seems Clear() is called why it shoudn't.
I wrote a small class to enumerate available networks on a smartphone :
class CNetwork
{
public:
CNetwork() {};
CNetwork(CString& netName, GUID netguid):
_netname(netName), _netguid(netguid) {}
~CNetwork() {}
CString& getName() { return _netname; }
GUID getGuid() { return _netguid; }
private:
CString _netname;
GUID _netguid;
};
class CNetworkList
{
public:
typedef std::list<CNetwork*>::iterator NetworkListIt;
CNetworkList() {}
~CNetworkList()
{
Clear();
}
CNetworkList::CNetworkList(const CNetworkList& rhs) {
CopyObj(rhs);
}
CNetworkList& CNetworkList:perator=(const CNetworkList& rhs)
{
CopyObj(rhs);
return *this;
}
void CopyObj(const CNetworkList& rhs)
{
_netlist = rhs._netlist;
}
void Clear()
{
for_each( _netlist.begin(), _netlist.end(), DeletePointer ());
}
void Add(CNetwork* network)
{
_netlist.push_back(network);
}
const CNetwork* getNetwork(CString netNameOrGuid)
{
if ((netNameOrGuid.GetAt(0) == '{') &&
netNameOrGuid.GetLength() == 39)
{
CLSID guid;
if
(SUCCEEDED(CLSIDFromString(netNameOrGuid.GetBuffer(),&guid)))
return getNetwork(guid);
}
else
{
NetworkListIt it;
for (it = _netlist.begin(); it != _netlist.end(); ++it)
if (!(*it)->getName().CompareNoCase(netNameOrGuid))
return (*it);
}
return NULL;
}
const CNetwork* getNetwork(CLSID guid)
{
if (!_netlist.empty())
Clear();
NetworkListIt it;
for (it = _netlist.begin(); it != _netlist.end(); ++it)
if ((*it)->getGuid() == guid)
return (*it);
return NULL;
}
private:
std::list<CNetwork*> _netlist;
};
CNetworkList getNetworkList()
{
int i = 0;
HRESULT hResult;
CNetworkList netList;
while( ConnMgrEnumDestinations( i, &connInfo ) == 0 )
{
CNetwork* pNetWork = new
CNetwork(CString(connInfo.szDescription), connInfo.guid);
if (pNetWork)
{
netList.Add(pNetWork);
}
i++;
}
}
When I call this code :
m_NetworkList = getNetworkList();
I got an assert in a Cstring desctructor so I suppose my class is doing
wrong...
When I debug in step by step I don't really understand the calls, it
seems Clear() is called why it shoudn't.