dll里面封装了一个结构,应用程序调用dll的时候,传递该结构作为参数,dll里面该函数的参数是引用方式,dll里面获取一个结构,该结构与传进来的结构相同,这里采用了直接赋值的方法也就是直接用=号来赋值,就在用=号赋值这一步错了,请问是怎么回事?

解决方案 »

  1.   

    另外补充一下,该结构体包含CString类型数据,与这有关系吗
      

  2.   

    运行期错误?
    建议跟到具体的代码位置
    有可能是在释放原CString临时变量的时候崩掉的,如果你DLL和EXE不是使用同一个堆的话(检查DLL和EXE Code Generation链接的是都是同一个版本的CRT)
      

  3.   

    是不是你的dll和现在的工程使用的字符集一不样?
    我前几天也碰到了这个问题,传CString时死活传不进去!
    最后发现:DLL用的是“多字节字符集”,而我的工程中用的却是“unicode”的;
    最后两个改成一致的就行了!你查一下你的是不是这个问题:
    在“项目->属性->常规”里设置
      

  4.   

    If you can not move your application to unicode, refactor the application and the DLL interface so that you don't need to pass MFC objects. I don't know your code so I don't even know if that is possible. In any case you simply cannot allow MFC objects to be passed from your dll to the app or the other way around. If you can refactor your application just a bit so that it does not directly depend on MFC in the interface, your DLL could take care of all the MBCS to Unicode conversions.
      

  5.   

    可能的原因比较多,EXE与DLL项目使用的字符集设置是否相同?结构对齐方式是否一致?是不是用同一版本的VC生成的?另外还要避免在不同的模块分配和释放内存。
      

  6.   

    谢谢大家,传递CString类型的参数到dll,dll对参数不能赋值,这是怎么回事? 传递CString是不是要做什么处理?
      

  7.   

    CString对内存有一套自己的处理,并且不是线程安全的。
    最好不要用CString作为接口参数。
      

  8.   

    另,如果是动态连接mfc的话,检查一下接口函数开始位置是否有
    AFX_MANAGE_STATE(AfxGetStaticModuleState());这样一句,
    加上试试,或许就好了,不确定。
    建议不要用CString作为接口参数。