社区
进程/线程/DLL
帖子详情
如何让编译出的新版dll,可以直接替换旧版本的dll
sophyyoung
2013-04-12 01:37:05
其实就是本来有个 a.lib和a.dll,是别人开发的,用户程序为b.exe,使用了a.dll。
之后我重新写了个新的lib和dll,接口函数都是一样的,考虑到兼容性,依然取名 a.lib和a.dll,可是却不能直接替换b.exe里面的a.dll,b还是需要包含新的a.lib,然后rebuild一下,才行,不知道有没有办法可以让在不重新编译用户程序的情况下,编写新的 dll呢?
...全文
1185
10
打赏
收藏
如何让编译出的新版dll,可以直接替换旧版本的dll
其实就是本来有个 a.lib和a.dll,是别人开发的,用户程序为b.exe,使用了a.dll。 之后我重新写了个新的lib和dll,接口函数都是一样的,考虑到兼容性,依然取名 a.lib和a.dll,可是却不能直接替换b.exe里面的a.dll,b还是需要包含新的a.lib,然后rebuild一下,才行,不知道有没有办法可以让在不重新编译用户程序的情况下,编写新的 dll呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lm_whales
2013-06-06
打赏
举报
回复
只要新的DLL和旧的DLL没有本质差别(实现相同功能,同为32BITS或者同为64BITS,没有错误),完全可以直接替换。 不能替换, 是导出函数名有改变或者导出方式不同,或者函数参数不同,函数调用约定不同等造成的。
weiql6
2013-04-19
打赏
举报
回复
不能吧,按楼主所说的情况,应该不需要重新rebuild的。我试了下,是不需要的。
chentao
2013-04-18
打赏
举报
回复
1
DLL中得函数在EXE中是隐式链接的,需要用到和DLL对应的导入库lib文件,并且编译成EXE时,这些导入库的信息会被写入到EXE的导入段,所以才不能直接替换。
sophyyoung
2013-04-12
打赏
举报
回复
唉,白开心一场,确实不能用,我刚才用NI 公司的labwindows 写的用户程序,debug能用,但release 在退出时有个如下错误: FATAL RUN-TIME ERROR: Unknown source position, thread id 0x00001ED4: The program has caused a 'General Protection' fault at 001B:686591AD. 使用windbg时错误是:Access violation - code c0000005 (first chance) 于是我转用 vs2008 里的 vc++ 写的用户程序,这下界面都出不来了。说的错误是: First-chance exception at 0x00000003 in AutoTest.exe: 0xC0000005: Access violation. Unhandled exception at 0x00000003 in AutoTest.exe: 0xC0000005: Access violation. 看起来错误都是一样的。 使用新的lib,重新编译一下就可以了。没有这样的问题了。。
sophyyoung
2013-04-12
打赏
举报
回复
看过了,也试过了,之前试的时候确实不行的,怎么今天试了就可以了呢! 主要是我用 depends 看的,他们的函数名都是一样的没错,但每个函数后面的 entry point 不同,我就以为不可以用了。
一个傻冒
2013-04-12
打赏
举报
回复
如果是delphi写的dll,那要改些东西才行。 楼主用工具先确认一下是用语言写的。用些查壳的工具,或者反汇编过来看看,也大概能知道。
无言猪
2013-04-12
打赏
举报
回复
用depends看一下两个dll的函数名一致不,有些不注意的地方也会引起导出函数名的不一直,比如extern "C", 或者用def文件重写了函数名的.
sophyyoung
2013-04-12
打赏
举报
回复
原来的dll都不知道拿什么编译的,这样都可以吗?
jimette
2013-04-12
打赏
举报
回复
引用 1 楼 ydfivy 的回复:
只要DLL的接口函数一定,只要符合这个调用函数,DLL就可以被调用。你的为啥要重新编译一下呢?
是这个道理 不能是把接口参数改了把?
一个傻冒
2013-04-12
打赏
举报
回复
只要DLL的接口函数一定,只要符合这个调用函数,DLL就可以被调用。你的为啥要重新编译一下呢?
VB6.0
DLL
制作工具
VB6.0
DLL
制作工具 让VB6.0也可以方便的制作标准
DLL
,链接的文件不再是ActiveX
DLL
! 内有说明文件、图样、示例程序。 参与讨论,请到:http://bbs.csdn.net/topics/390609644 修改“资源”后就会无法显示?再试一次,把附件
替换
成最新的软件版本(Ver 2.02)
如何
编译
生成
dll
动态链接库是Windows的基石。所有的Win32 API函数都包含在
DLL
中。3个最重要的
DLL
是KERNEL32.
DLL
,它由管理内存、进程和线程的函数组成;USER32.
DLL
,它由执行用户界面的任务(如创建窗口和发送消息)的函数组成;GDI32.
DLL
,它由绘图和显示文本的函数组成。在此,我们主要用实际的操作过程,简要的说明如何创建自己的 Win32
DLL
。 一、创建
DLL
工程
C++中的
DLL
动态链接库,如何
编译
并使用
DLL
DLL
(动态链接库)是一种在Microsoft Windows操作系统中常用的文件格式,用于实现共享函数库。
DLL
的内容在程序运行时被加载和链接,而不是在程序
编译
时。这被称为动态链接,与静态链接库(如静态库 .lib 文件)形成对比。
DLL
文件包含可以被多个程序同时使用的代码和数据。:多个程序可以共享同一个
DLL
文件中的代码和资源,这比每个程序单独拷贝这些代码更有效率,从而节省内存。:
DLL
允许开发人员创建模块化的程序。你可以在
DLL
中放置一组功能,并且在需要时由多个程序或其他
DLL
调用。
反
编译
DLL
和.NET文件工具dnSpy
dnSpy是一个反
编译
DLL
和.NET文件的一个工具。 方法/步骤1为了报答各位粉丝朋友的厚爱,今日将我收藏多年的反
编译
神器分享给你们,他就是完美的dnspy,可
直接
修改exe,然后重
编译
。喜欢编程的朋友们,看完请点赞。2网上下载dnspy软件,然后安装,一步到位,安装很简单的。然后打开软件,3如上图红色圈
出
位置,打开要反
编译
的可执行程序,exe、
dll
等。打开后,如下图。4点击左侧目录,可看到本程序的框架,右侧可看到每个框架构成的代码。如下图。5有点点击,如下图,选择编辑类,则可以
直接
修改该程序代码了。6
备份并
替换
正在运行的程序
dll
以前写过一个备份
替换
工具,功能是用新
编译
的
dll
替换
老的,达到软件升级的目的,同时备份下老的
dll
防止发生意外;利用MoveFileEx实现程序的隐藏、自启动与自删除https://www.cnblogs.com/tt_mc/archive/2010/01/24/1655176.html。
替换
运行中的文件https://blog.csdn.net/xcntime/article/details/7371817。LPCTSTR lpNewFileName, //移动后的文件名。
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章