我做了两个例子第一个是在同一个类中调用一个普通的方法,比如SetVec(vector v)这个方法有一个参数是vector,在函数内部没有进行任何的操作。
由于此时vector作为值传递,理应的过程是拷贝传入参数v的一个备份,在函数出栈前把拷贝的vector进行释放。这个例子完全正常。另一个例子是我调用DLL中的一个接口函数指针,向DLL传递一个vector,函数名同上,在DLL内部此函数的实现体内部同样没有进行任何操作。
但是这个例子很奇怪,作为vector内部的值完全可以正常的传入,但是在函数退出的时候却出现内存报错!不知道原因什么,我跟踪了以下,发现第一个例子删除vector时进入的是AFXMEM.cpp这个文件,而第二个却进入了DBGDEL.cpp文件,但是里面的指针都有地址,除此之外我就不明白了。请各位大哥大姐帮我看一下,或是调试一下就最好了!十分感谢!

解决方案 »

  1.   

    dll:
    _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);}没有错误,可能是你程序的原因,在看看吧
      

  2.   

    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");这些事什么阿?我的DLL是win32得,你的是MFC得嘛?
      

  3.   

    _cdecl方式的你也可以用extern "C"
      

  4.   

    我的DLL
    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)就出错!
      

  5.   

    我试了一下,做一个MFC得库就好用,一般的win32DLL就不好用,怎么回师?
      

  6.   

    fun = (FUNC)GetProcAddress(hm,"SetV");
    是否为空如果请这样声明dll函数:
    extern "C" _declspec (dllexport) void SetV(vector<int> v)
    {}
      

  7.   

    STL对象在别处(其他EXE或DLL)调用都会这样
    MSDN有详细解决办法!
    参照
    http://expert.csdn.net/Expert/topic/1393/1393627.xml?temp=.2697412