C#通过ocx调用VC6.0的dll,为啥会出现这么多疑难杂症啊?

winginsky 2011-05-17 03:09:09
C#发布版状态和代码调试状态,出的结果完全不一样
...全文
100 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
winginsky 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lijianli9 的回复:]

很定是内存地址有影响了。
lz别不相信。
[/Quote]
我相信是内存地址的原因。
lijianli9 2011-05-17
  • 打赏
  • 举报
回复
很定是内存地址有影响了。
lz别不相信。
winginsky 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 my_id_is_null 的回复:]

VC6.0dll里面的一段代码
C/C++ code

for()在循环里做如下操作
{
char szBuf[128]; //在后面没有用过这个变量
//
更新数据库
}


C#里通过ocx调用DLL,数据库没有更新。(C#调试状态)
VC6.0自己直接调用这个dll时,数据库正常更新
当我注释掉那个没有用的变量时,调用DLL时,数据库正常更新(C#调试状态)……
[/Quote]
我把没有注释掉那个变量的编译成dll,放在SVN服务器上,再把注释掉那个变量的编译成dll,放在svn目录下,经SVN比较,两个dll是没有区别的(SVN比较文件的原理应该是按位比较文件吧)
winginsky 2011-05-17
  • 打赏
  • 举报
回复
VC6.0dll里面的一段代码

for()在循环里做如下操作
{
char szBuf[128]; //在后面没有用过这个变量
//
更新数据库
}

C#里通过ocx调用DLL,数据库没有更新。(C#调试状态)
VC6.0自己直接调用这个dll时,数据库正常更新
当我注释掉那个没有用的变量时,调用DLL时,数据库正常更新(C#调试状态).

为什么会出现这种情况,如果我没有看DLL的代码,我估计永远也不知道。
dfasri 2011-05-17
  • 打赏
  • 举报
回复
有这回事? 我用VC8直接跟C#交流都正常的...
winginsky 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kyotrue 的回复:]

出现不一样很正常,DEBUG对没有赋值的内存会用CD填充,而RELEASE版本不会,当字符串越界时结果会明显不同。
[/Quote]
dll是release编译好了的,我用C#调用时它难道会把dll还原成Debug?
kyotrue 2011-05-17
  • 打赏
  • 举报
回复
出现不一样很正常,DEBUG对没有赋值的内存会用CD填充,而RELEASE版本不会,当字符串越界时结果会明显不同。

15,472

社区成员

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

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