如果DLL与别人重名会怎么样?
我第一次上手用C语言进行WINDOWS编程,只是拿别人的源代码来改。其中一个DLL文件我变动很大。安装时这个DLL是复制到SYSTEM32文件夹下的,如果刚巧别人也用到了这个DLL或是有同名的DLL的话,不知会怎么样?如果会发生问题的话应该怎么样解决? 问题点数:30、回复次数:8Top
1 楼goodboy1881(积木)(谁都别拦着我在水源升星)回复于 2005-06-01 08:46:18 得分 3
1.同名的文件不会存在在同一个文件夹的下面
2.系统会按照系统文件夹声明的顺序查找文件,所以你最好在你的程序里面考虑到查找的问题,
3.为啥不更换一个名字?
Top
2 楼forover(天下无吥散dě宴席)回复于 2005-06-01 08:49:20 得分 1
同意楼上的,同一文件夹是不会出现同名文件的,最好是你的DLL跟你的程序放到同一目录Top
3 楼he_sl(he_sl)回复于 2005-06-01 08:50:39 得分 2
我觉得楼主是想知道到底有哪些程序会用到这个dll。这个怎么弄呢?
把你的Dll放到你的程序同目录下,应该先在同目录下找DLL吧Top
4 楼ahu9870(阿胡9870)回复于 2005-06-01 08:59:41 得分 12
根据MS资料上的介绍,系统对DLL的装载顺序是:
1).如果使用LoadLibrary显式链接,可以指定DLL的完整路径名;
2).如果不指定路径名,或是进行隐式链接,Windows将遵循下面搜索顺序来定位DLL
i). 包含EXE文件的目录
ii). 进程的当前目录
iii).Windows系统目录
iv). Windows目录
v). 列在PATH环境变量中的目录
因此,正确的做法是,为了避免与其它软件冲突,你应当把自己专用的DLL安装到你自己的应用软件目录(EXE目录)下,而不是安装到系统目录。这样,如果你的DLL名与系统目录下的DLL同名,只要在你的EXE文件同目录下存在这个DLL,系统将会首先装载你自己的DLL。Top
5 楼ahu9870(阿胡9870)回复于 2005-06-01 09:03:40 得分 0
否则,如果你覆盖了系统目录下的非系统保护DLL,当别人试图调用这个DLL时,将会出现入口点错误!Top
6 楼he_sl(he_sl)回复于 2005-06-01 09:24:10 得分 1
对了,有没有办法知道一个DLL有哪些程序可能用到?Top
7 楼kevin09(kevin)回复于 2005-06-02 05:41:22 得分 0
不想改DLL的名字是因为现在的名字很贴切,放到SYSTEM32里面,是因为不想让别人不通过SETUP就随便COPY整个程序去用,算不得是加密,糊弄一下外行了。Top
8 楼pipilupzj(皮皮鲁)回复于 2005-06-02 09:18:37 得分 11
有两个解决办法:
1、不改Dll名,将他放在你的程序所在目录下,要达到你说的防止别人不setuup就随便copy整个程序使用,只要在setup时,在注册表中创建一个值,然后在程序中验证一下有没有这个值就行了。另外还有许多别的方法,不一定一定要把那个同名的dll放到system32目录下。
2、如果你一定要将他放system32目录下,在你的dll名字前面加上一个前缀,比如说你的名字或者你公司的名字都可以,这样想重名就很难了Top




