一个很困惑的问题

fage87295970 2010-08-04 12:15:05
最近需要做个小程序实现对word文档的操作,功能都已经实现了,但我想先把操作word那部分代码做成动态链接库(MFC 扩展DLL)再使用,可问题却出现了。当选择“在静态库中使用MFC”时,就会出现“无法解析外部符号”的错误,当选择“在共享DLL 中使用MFC”,生成的程序可以正常运行,可在调试状态下运行程序,却出现“0x7c94ab33处未处理的异常 0xc0000005写入位置0x00030ffc时发生访问冲突”,这是为何啊。另外当执行下面语句时

wstring wstr[] = {_T(""),_T("daf"),_T("gdasf"),_T("gadf")};
vector<wstring> vstr;
vstr.assign(str,str+4);
wd.writetabletext(vstr); //wd是封装成dll类的对象

如果操作word的类不做成dll,直接使用源文件,上面代码是可以正常执行的啊,可做成dll后,出现下面的错误:

Run-Time Check Failu #2-Stack around the avriable 'wd' was corrupted.


希望各位大侠给予指点
...全文
198 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fage87295970 2010-08-23
  • 打赏
  • 举报
回复
lib文件我已经导入了
fage87295970 2010-08-20
  • 打赏
  • 举报
回复
看来是找不到答案了。另外我想问其他一个问题我现在在用2008 sp1,做界面确实漂亮多了,相比较以前版本,做出来的多文档对窗口具有记忆功能,这挺不错,可我不想用它,想把这个功能给取消,找了半天也没找到保存和读取窗口位置尺寸的地方。有了这个功能,我在PreCreateWindow还是OnCreate里控制窗口大小位置都会失败。
yaoyue1019 2010-08-20
  • 打赏
  • 举报
回复
1 针对无法解析外部符号问题
我以前是做lua时有碰到过 当时是没有引入lib文件造成的
我那是
#if defined (_DEBUG)
#pragma comment( lib, "lua5.1.lib" ) // Lua Support
#else
#pragma comment( lib, "lua51.lib" ) // Lua Support
#endif
就好了 你看看是不是适当的改一下

2 获取窗口位置 GetWindowRect()
fage87295970 2010-08-10
  • 打赏
  • 举报
回复
看来又是没有结果了这里
fage87295970 2010-08-05
  • 打赏
  • 举报
回复
谁能帮我分析。。。。
fage87295970 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 coding_hello 的回复:]
stdcall和cdecl调用约定不一致吧?
[/Quote]

那就是在类的导出导入前都加上stdcall或cdecl么
fage87295970 2010-08-04
  • 打赏
  • 举报
回复
请大家注意 InvokeHelper(0x5,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);
中的0x5和“0x7c94ab33处未处理的异常 0xc0000005写入位置0x00030ffc时发生访问冲突”中的0xc0000005是一样的吧
fage87295970 2010-08-04
  • 打赏
  • 举报
回复
“0x7c94ab33处未处理的异常 0xc0000005写入位置0x00030ffc时发生访问冲突”关于这个错误,今天上午我跟踪了一下,发现一个变量m_wdSel(Selection对象)的m_lpDispatch指向的值在析构前值突然变成0xffffffff。在dll源代码中,w_wdSel是这样定义的

m_wdSel = m_wdApp.GetSelection(); //m_wdApp是_Application的对象

GetSelection是这样定义的:(在msword.cpp)

LPDISPATCH result;
InvokeHelper(0x5,DISPATCH_PROPERTYGET,VT_DISPATCH,(void*)&result,NULL);
return result;

在客户端程序是这样使用dll的
1、{
2、 AFXOleInit();
3、 CWordWriter wd; //被封装成dll的类

4、 wd.Create();
5、 wd.ShowApp();
6、}

程序运行在行6之前,m_wdSel.m_lpDispatch中的值都不会变,运行到行6执行CWordWriter析构函数时,值就变了,更奇怪的是CWordWriter中其他的变量的lpDispatch中的值都不变,唯独wdSel。何解啊????
proer9988 2010-08-04
  • 打赏
  • 举报
回复
做成COM接可以了、
野男孩 2010-08-04
  • 打赏
  • 举报
回复
stdcall和cdecl调用约定不一致吧?
IONPhantom 2010-08-04
  • 打赏
  • 举报
回复
Run-Time Check Failu #2-Stack around the avriable 'wd' was corrupted. 这个明显是数组写越界了.
注意不要导出模板类
na_he 2010-08-04
  • 打赏
  • 举报
回复
AFX_EXT_CLASS 导出的类前面加keyword.

15,471

社区成员

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

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