能否在生成dll时指定该dll只能被唯一的exe文件调用,如果可以的话,能否通过pe exploerer修改该dll,使其能被我希望的exe文件调用?ps:如果pe exploerer能修改,请高手稍微详细讲一下操作过程。

解决方案 »

  1.   

    生成dll时指定该dll只能被唯一的exe文件调用, 那还做dll干什么呢。
      

  2.   

    谢谢回复。明白你的意思。
    但是,我这边的现象是这样的:在开源的代码上做了改动。
    如果改变了编译后的可执行文件名称,发现程序运行时,弹出对话框,提示不能加载某个dll,而其他dll却可以正常加载。
    是否可执行文件名称能够决定dll是否被加载?
    dll的路径位置都没有变,exe一共要加载4个dll。
    把exe改名后,其他的3个都能正常加载,就只有一个有问题,提示加载失败。如果问题不在dll身上,是在exe文件上?有这种可能不?
      

  3.   

    估计是在DllMain中用GetModuleFileName API检查了.EXE主进程的文件名吧
      

  4.   

    用dumpbin 查看了这个dll,发现用了GetModuleFileNameA这个函数。
    但是其他的可加载dll,也有用到这个函数。
    麻烦再给指点指点。
      

  5.   

    是不是应该给dll改个名字,既然你都把人家的内容改了,免得影响其它程序
      

  6.   

    你给exe做一个hash值, 运行的时候,算一下这个程序的hash值就可以了.至于 hash算法,可以是 md5或者sha
      

  7.   

    提示不能加载某个dll,问题通常是出在exe文件上。很可能dll的文件名与exe的文件名有某种关联(如仅扩展名不同等)。exe加载dll时,先调用GetModuleFileName取得自己的文件名称,据此来确定待加载的dll名称。
      

  8.   

    调GetMOduleFileName(NULL, &lpszFileName, MAX_LENGTH),再判断lpszFileName是否是自己想要得即可。
    别的DLL用到了GetModuleFileName也不奇怪,毕竟这是一个很常用的API。