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的代码中, 这样解决了所有问题

posted @ 2022-11-17 16:47  Yofoo  阅读(132)  评论(0)    收藏  举报