请教高手DLL HELL 问题怎么解决?急!高手帮忙!在线等!

fairykengqiangmeigui 2009-09-15 05:23:06
我编了一个DLL,在应用程序中使用没有问题,可我又想添加一些功能了,只能更改dll的.h文件,可是改了之后应用程序就不能用了,报错。上网查说是Dll hell。可只说的怎么避免,没有说,出现了怎么解决,请教高手。
我把改后的DLL clean、rebuild一下然后把.h重新加到应用程序里,又把应用程序clean、rebuild一下,不知道这种方法能不能解决,我试了一下,问题好像还是存在,不知道是哪儿的问题?
...全文
113 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
各位大侠再请教一个问题:
我编了一个父类在head.dll,两个子类分别在child1.dll和child2.dll,我在父类head。dll中定义一个虚函数 virtual int GetBlclick();并实现
int GetBlclick()
{
return 0;
}
在子类child1.dll中重载了这个函数,让其返回一个整形变量。
int CSwitchO1::GetBlclick()
{
return m_blclick;
}
可在.exe中调用时并没有返回我想要的变量值,怎么回事儿呢?是不是返回值不能是int型,那应该是什么类型?返回BSTR是没有问题的。
曾经的董胖 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fairykengqiangmeigui 的回复:]
没错,我的确增减了head。dll的成员变量和方法,这是必须的,可我已经clean,rebuild了一下,不就相当于另分配空间了吗?这样还不行吗?有没有什么解决办法?head。dll的成员变量和方法真的真的不能更改吗?我已经更改了,有什么办法让它恢复吗?
[/Quote]
肯定不能增减。C++的类成员属性和方法是靠相对位移寻址的,你改了位置,意味着没有重新编译过的子类开始张冠李戴了。
对应的方法,要么你让其打回原形,通过其他办法添加你想要加的处理。要么重新编译子类。没有什么其他办法。
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 randyqiu 的回复:]
修改头文件后,相应的函数功能有没有进行修改呢
[/Quote]
功能当然更改啦
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ytandwy 的回复:]
首先要明确head.dll中可以修改,但必须满足下列条件:
不能增减任何成员变量或方法
在child1.dll和child2.dll中用到的任何一个成员方法,都不能有接口参数上的修改,也不能有先后次序上的调整。
在child1.dll和child2.dll中用到的任何一个成员变量,都不能有数据类型上的变更,也不能有先后次序上的调整。
在满足上述条件的时候,一般child1.dll和child2.dll不用重新编译可以继续使用。

[/Quote]
没错,我的确增减了head。dll的成员变量和方法,这是必须的,可我已经clean,rebuild了一下,不就相当于另分配空间了吗?这样还不行吗?有没有什么解决办法?head。dll的成员变量和方法真的真的不能更改吗?我已经更改了,有什么办法让它恢复吗?
WuXinyang 2009-09-16
  • 打赏
  • 举报
回复
全部重新编译一下试试 .
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 olino 的回复:]
这肯定要重新编译你的那两个child动态库的。没别的办法,一般项目方在同一个解决方案下,设置编译依赖,保险些
[/Quote]
什么意思啊,怎么设置编译依赖?望大虾给详细讲讲,多谢
oLINo 2009-09-16
  • 打赏
  • 举报
回复
这肯定要重新编译你的那两个child动态库的。没别的办法,一般项目方在同一个解决方案下,设置编译依赖,保险些
Randyqiu 2009-09-15
  • 打赏
  • 举报
回复
修改头文件后,相应的函数功能有没有进行修改呢
曾经的董胖 2009-09-15
  • 打赏
  • 举报
回复
首先要明确head.dll中可以修改,但必须满足下列条件:
不能增减任何成员变量或方法
在child1.dll和child2.dll中用到的任何一个成员方法,都不能有接口参数上的修改,也不能有先后次序上的调整。
在child1.dll和child2.dll中用到的任何一个成员变量,都不能有数据类型上的变更,也不能有先后次序上的调整。
在满足上述条件的时候,一般child1.dll和child2.dll不用重新编译可以继续使用。
  • 打赏
  • 举报
回复
各位高手,重申一下我的问题,可能没说明白:
我编了一个父类在head.dll,两个子类分别在child1.dll和child2.dll,由于需要我现在把head.h改了,可执行文件.exe里要用到上面的三个dll,我只把可执行文件里的head.h变了并重新编译,child1和child2.dll都没有变,这样难道不行吗?child1和child2.dll并没有用到head.h中改动的部分啊
mengde007 2009-09-15
  • 打赏
  • 举报
回复
内存结构要兼容;
MoXiaoRab 2009-09-15
  • 打赏
  • 举报
回复
贴代码
oyster2008 2009-09-15
  • 打赏
  • 举报
回复
如果DLL提供的函数接口发生变化,必须重新编译连接应用程序
  • 打赏
  • 举报
回复
自己顶一个

15,471

社区成员

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

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