C++跨模块传递对象
C++用接口函数跨模块传递对象会导致内存分配,释放问题, 一般转换合成基本的C方式结构再转换回来
可以使用回掉函数等多个方法简化代码和过程
如传递一个map
在dll的h文件
static BOOL WINAPI MapDatBack(CHAR *pName, CHAR *pValue, VOID *pMap)
{
map<string,string> *pMapDat = (map<string,string> *)pMap;
(*pMapDat)[pName] = pValue;
return TRUE;
}
class xxx
{
virtual BOOL GetBlockSerialNumbers(CHAR *PanelSerialNumber, BOOL CheckRoute, VOID *pMap, FUN_MAPDAT fnDat = MapDatBack);
};
dll的cpp文件
BOOL xxx::GetBlockSerialNumbers(CHAR *PanelSerialNumber, BOOL CheckRoute, VOID *pMap, FUN_MAPDAT fnDat)
{
map<string, string> MapDat;
....
MapDataBack(MapDat, fnDat, pMap);
}
BOOL MapDataBack(map<string, string> &MapDat, FUN_MAPDAT fnDat, VOID *pMap)
{
map<string, string>::iterator Iter;
CHAR *pName, *pValue;
for(Iter = MapDat.begin();
Iter != MapDat.end();
Iter ++)
{
pName = (CHAR *)Iter->first.data();
pValue = (CHAR *)Iter->second.data();
fnDat(pName, pValue, pMap);
}
return TRUE;
}
调用方包含h文件直接用
{
map<string,string> MapDat;
g_pobj->GetBlockSerialNumbers("3423525", false, &MapDat);
return TRUE;
}
这里可以省略这个回掉函数, 而且回掉函数会重新编译到exe的代码中, 这样解决了所有问题