在exe中:
myexef(){
CString s1,s2;
...//动态加载myDll.dll
s1="How are yur";
s2=myDLLF(s1);   //该语句调用DLL中的函数,执行正常,函数返回值正确无误.
s3=s2;    //该语句会出错,该如何将s2的值赋值给s3呢?
...
s1.freeExtrc();
s2.freeExtrc();   //这一语句也会出错,该如何释放s2呢?
s3.freeExtrc();
}

解决方案 »

  1.   

    s3=s2;    //该语句会出错,该如何将s2的值赋值给s3呢? 
    s3 没定义吧?
    s2.freeExtrc();  //这一语句也会出错,该如何释放s2呢?
    先注释掉这句看看..
      

  2.   

    dll中和exe中,new时使用的堆是不同的,dll中new出来的内存要在dll中释放,exe中new出来的内存要在exe中释放。当然,重载new操作符,使用同一个堆进行分配就不需要这样。
      

  3.   

    myDLLF是怎么定义的?把返回值改成CString试试。如果在不同的模块中分配和释放内存,Debug版就会报错。
      

  4.   

    myDLLF函数是这样的:
    CString myDLLF(CString s)
    {
      CString st;
      ...
      st.FreeExtrc();  teture s;
    }另:
    在EXE的函数中存在:CString S3 
      

  5.   

    参数类型最好不要用CString,改成其它的试试
      

  6.   

    在调用DLL的myDLLF(s1)函数之后,只要该语句中有的变量在后续语句中使用,就会出问题.
    另外,程序改成下面这样,在myexef()函数执行完毕也会报错.
    在exe中: 
    myexef(){ 
    CString s1,s2; 
    ...//动态加载myDll.dll 
    s1="How are yur"; 
    s2=myDLLF(s1);  //该语句调用DLL中的函数,执行正常,函数返回值正确无误. 
    //s3=s2;    //该语句会出错,该如何将s2的值赋值给s3呢? 
    ... 
    //s1.freeExtrc(); 
    //s2.freeExtrc();  //这一语句也会出错,该如何释放s2呢? 
    s3.freeExtrc(); 
    } //前面不会有错了,但到这里(即本函数执行结束),也会出错.
      

  7.   

    //前面不会有错了,但到这里(即本函数执行结束),也会出错.
    是s3.freeExtrc(); 这句错了吧.S3都没看到有值,你想让它释放内存地址?
      

  8.   

    是不是你的EXE与DLL使用MFC的方式不同,一个用MFC静态库,另一个用共享DLL中的MFC?