我做了两个例子第一个是在同一个类中调用一个普通的方法,比如SetVec(vector v)这个方法有一个参数是vector,在函数内部没有进行任何的操作。
由于此时vector作为值传递,理应的过程是拷贝传入参数v的一个备份,在函数出栈前把拷贝的vector进行释放。这个例子完全正常。另一个例子是我调用DLL中的一个接口函数指针,向DLL传递一个vector,函数名同上,在DLL内部此函数的实现体内部同样没有进行任何操作。
但是这个例子很奇怪,作为vector内部的值完全可以正常的传入,但是在函数退出的时候却出现内存报错!不知道原因什么,我跟踪了以下,发现第一个例子删除vector时进入的是AFXMEM.cpp这个文件,而第二个却进入了DBGDEL.cpp文件,但是里面的指针都有地址,除此之外我就不明白了。请各位大哥大姐帮我看一下,或是调试一下就最好了!十分感谢!
由于此时vector作为值传递,理应的过程是拷贝传入参数v的一个备份,在函数出栈前把拷贝的vector进行释放。这个例子完全正常。另一个例子是我调用DLL中的一个接口函数指针,向DLL传递一个vector,函数名同上,在DLL内部此函数的实现体内部同样没有进行任何操作。
但是这个例子很奇怪,作为vector内部的值完全可以正常的传入,但是在函数退出的时候却出现内存报错!不知道原因什么,我跟踪了以下,发现第一个例子删除vector时进入的是AFXMEM.cpp这个文件,而第二个却进入了DBGDEL.cpp文件,但是里面的指针都有地址,除此之外我就不明白了。请各位大哥大姐帮我看一下,或是调试一下就最好了!十分感谢!
解决方案 »
- 一个对话框怎么同时和两个Tab控件关联
- 请教读取edit box的值
- 工作线程在循环等待时cpu占有率高
- 急!好心人一定替我解决一下!关于对话框中建立多行CEdit问题!
- VC 6.0里的DATAGRID相关文件拷过来放在VS 2005里,在装了VC 6.0的机器上可以编译运行,但是在没有VC 6.0(即使有VS 2005)的机器上也可以编
- 窗体分割问题??为什么高度总是为0啊?
- 为什么用CFrameWnd::Creat()创建的窗口,它的风格无论怎么修改都会有很深的边框?
- 小弟实在无法解决这个问题了,请大家帮我啊~
- 一个关于数据库备份的问题!!!非常急!!!先谢谢各位了!
- 如何把一个组件与MTS集成
- ado : 为什么update没有写入数据库呢?
- WebBrowser未响应问题
_declspec (dllexport) int A(vector<string> a1)
{
return 1;
}Program:
void CTestVectorView::OnButton1()
{
// TODO: Add your control notification handler code here
vector<string> A2;
A2.push_back("1");
A2.push_back("2");
typedef int (*A3)(vector<string> a1);
HMODULE hm=LoadLibrary("TestDll.dll");
A3 A31=NULL;
A31=(A3)GetProcAddress(hm,"?A@@YAHV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@@Z");
int i=A31(A2);}没有错误,可能是你程序的原因,在看看吧
typedef void (* FUN)(vector<int>);
void SetV(vector<int> v)
{
}我的client
typedef void (* FUNC)(vector<int>) ;
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
HMODULE hm = LoadLibrary("DLL1.dll");
FUNC fun;
if (hm != NULL)
{
fun = (FUNC)GetProcAddress(hm,"SetV");
fun(v1);
}一运行到fun(v1)就出错!
是否为空如果请这样声明dll函数:
extern "C" _declspec (dllexport) void SetV(vector<int> v)
{}
MSDN有详细解决办法!
参照
http://expert.csdn.net/Expert/topic/1393/1393627.xml?temp=.2697412