DLL里为什么不能返回一个map对象
我发现DLL里的函数new的东西,不能在调用DLL的进程里delete,反之亦然。
这似乎不合逻辑。但却是真的
DLL:
int * create(){
return new int(1);
}
EXE:
int * pi=create();
delete pi;//ERROR!!!
或
DLL:
void release(int * pi){
delete pi;//ERROR!!!!!
}
EXE:
release(new int(1));
另外,我在DLL里返回map<string,string>类型的东西,调用DLL的进程却不能接受它,像这样:
DLL:
map<string,string>* getData(){
map<string,string>* pm;
pm->insert(pair<string,string>("1","1"));
}
EXE:
map<string,string>* pm=getData();
map<string,string> m =*pm;//ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
map<string,string>::iterator iter=pm->begin();
while(iter != pm->end())
{
cout << (*iter).first ; //OK,output "1"
iter++;//ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
并不是所有的元素都不能访问,只是最后一个元素的后一个元素不行。
这似乎不合逻辑。但却是真的
DLL:
int * create(){
return new int(1);
}
EXE:
int * pi=create();
delete pi;//ERROR!!!
或
DLL:
void release(int * pi){
delete pi;//ERROR!!!!!
}
EXE:
release(new int(1));
另外,我在DLL里返回map<string,string>类型的东西,调用DLL的进程却不能接受它,像这样:
DLL:
map<string,string>* getData(){
map<string,string>* pm;
pm->insert(pair<string,string>("1","1"));
}
EXE:
map<string,string>* pm=getData();
map<string,string> m =*pm;//ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
map<string,string>::iterator iter=pm->begin();
while(iter != pm->end())
{
cout << (*iter).first ; //OK,output "1"
iter++;//ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
并不是所有的元素都不能访问,只是最后一个元素的后一个元素不行。
...全文
相关推荐
阿里云短信接口开发例子
阿里云短信接口开发例子
spring3.0支持restful的demo
对应博客中的spring3.0支持restful的demo源代码,由于容量原因我把lib下面的包给去掉了。如果有需要lib下面用的jar包的话就给我留言,留个email,我看到后就发过去。
单词转换BFS算法[源码]
该内容展示了一个使用BFS(广度优先搜索)算法解决单词转换问题的C++程序。程序通过比较两个单词是否仅有一个字母不同来确定它们是否可以相互转换。用户输入起始单词、目标单词和一组中间单词,程序计算从起始单词到目标单词的最短转换路径长度。如果无法转换,则输出-1。核心函数isOneDiff用于检查两个单词是否仅有一个字母差异,而BFS算法则用于探索最短路径。
利用Sigar获取系统信息.pdf
利用Sigar获取系统信息.pdf
java导出生成word的简单方法
主要为大家详细介绍了java导出生成word的简单方法,感兴趣的朋友可以参考一下


进程/线程/DLL
