在静态库LIB中使用CString类报错

jashon_w 2008-09-02 01:24:37
请教各位大侠,现在兄弟在开发一个系统时,把一些公用的程序形成了一个静态LIB库,在这个库中的一个类定义了有CString类的一个成员变量,编译形成LIB没有问题,只是在形成可执行文件后,一运行到设置此变量的一个函数,就会出现
First-chance exception in HT3007B.exe (MFC42D.DLL): 0xC0000005: Access Violation.
然后程序就退出了。
部份代码:
class CTestCls
{
...
public:
CString m_str;
};
...
void CTestCls::SetRefUnit(CString &src)
{
m_str=src;
}
上面的代码是形成的需要共用的一个类代码,在使用LIB时,总是在m_str=src一行就退出了。不知道是什么原因?
另外好象形成扩展DLL,也会存在这种问题,总是在CString成员变量报错。
另外,就是把形成LIB的程序文件直接放到项目程序里面编译后,运行,是不会出现这样的问题的。另外就是一旦使用LIB后,好象一个类被创建了两次。
在线期待中......
...全文
172 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
harry330 2008-09-07
  • 打赏
  • 举报
回复
跟你建的DLL类型有关。常规DLL内部可以用MFC类,但是在接口中不能只用MFC类型。改成MFC扩展DLL就没问题了。具体请看《CodeGuru VisualC++编程精粹》关于DLL的部分
THCNC 2008-09-07
  • 打赏
  • 举报
回复
[Quote=引用楼主 jashon_w 的帖子:]
在形成可执行文件后,一运行到设置此变量的一个函数,就会出现
First-chance exception in HT3007B.exe (MFC42D.DLL): 0xC0000005: Access Violation.
然后程序就退出了。
[/Quote]

1,是不是因为你的lib是debug版而可执行文件是release版的缘故?将lib也做成release版,
2,你lib的settting...里面设置Microsoft Foundation Classes设置为Use MFC in a Shared DLL
xsc2001 2008-09-06
  • 打赏
  • 举报
回复
我觉得是你的void CTestCls::SetRefUnit(CString &src) 函数中的参数类型问题,
你将参数改成char*试一下。
sjdev 2008-09-06
  • 打赏
  • 举报
回复
在“m_str=src”一行就退出了,应该是上一行出现的问题。
如果说执行完“m_str=src”这一行就退出,才是这一行的问题。
feelkill 2008-09-04
  • 打赏
  • 举报
回复
我认为也是在参数的类型上出了问题的.可以试试楼上的方法.
  • 打赏
  • 举报
回复
参数用LPCTSTR再试试看.
DentistryDoctor 2008-09-04
  • 打赏
  • 举报
回复
CTestCls对象是不是有问题,而不是CString的问题?
jashon_w 2008-09-03
  • 打赏
  • 举报
回复
现在已经给帖子加分了。欢迎各位大侠踊跃发言吧!
jashon_w 2008-09-03
  • 打赏
  • 举报
回复
兄弟初到贵宝地,现在“银子”没有,有“银子”后,一定大大的给。
jashon_w 2008-09-02
  • 打赏
  • 举报
回复
怎么没有人知道吗?

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧