今天在给公司网络游戏项目的patchupdate程序添加杀木马的功能时,遇到了问题。
问题如下: 我给patchupdate添加杀木马功能是调用了一个dll内的函数,我是静态链接的(就是include这个函数的头文件,链接了个.lib。patchupdate程序是先更新本身的,它把自己更新完了就重新启动,这时因为其依赖那个dll,所以报错“找不到某个dll”,那肯定没法更新下来那个dll文件了。
经高手指点,用
动态链接dll的方法成功解决了此问题!故写此文以记之!
下面把几个API的使用例子代码贴出来,方便以后查看,这个代码可以在msdn里找到的。
#include <windows.h>
typedef int (*MYPROC)(LPTSTR);
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
// Get a handle to the DLL module.
hinstLib = ::LoadLibrary(TEXT("myputs.dll"));
// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
{
ProcAdd = (MYPROC) ::GetProcAddress(hinstLib, "PatchUpdate"); /// 函数 PatchUpdate();
// If the function address is valid, call the function.
if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
(ProcAdd) (TEXT("Message via DLL function\n"));
}
// Free the DLL module.
fFreeResult = ::FreeLibrary(hinstLib);
}
// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
printf("Message via alternative method\n");
return 0;
}
2007-10-23
现在又改成静态链接的了,因为动态链接的话,只要把杀木马的dll干掉就没作用了。这样子没了这个dll就得重新安装客户端或者从别的地方拖这个dll过来,patchupdate才能启动起来。
要把patchupdate用QT写的话,如果要玩家不用重新下载客户端的话,就得:
1.把Qt编译成静态库,patchupdate链接用到的静态库。
or
2.改变更新次序,让patchupdate先更新下Qt的dll下来(指定这个更新顺序不能写在patchupdate自身里面,得靠srvflist.xml),这样子的好处是patchupdate本身不会很大,其他用到Qt的东西也可以与其共享Qt的dll,比如独立于客户端的聊天软件
ps:刚才看了下,更新顺序是写在patchupdate里面的。所以否定2方法。
posted on 2007-04-29 02:08
七星重剑 阅读(1493)
评论(8) 编辑 收藏 引用 所属分类:
PL--c/c++