【Windows】DLL中获取自身的句柄

来源:互联网 发布:怎么手机淘宝开店认证 编辑:程序博客网 时间:2024/05/06 04:45

由于 dll 自身无法执行,需要别的程序调用。

这样就造成了如下问题:如果想在 dll 中获取 dll 自身的路径、名称,就不好办了!

GetCurrentDirectory() 只能获取到调用主程序的路径;GetModuleFileName() 只能得到 dll 的句柄后才能工作;

写死在参数里倒是可以用,但是如果改变名称,就会失效,相当于在程序里埋了一颗雷!

HMODULE hMod = GetModuleHandle(_T("ntdll.dll"));

最后终于找到了方法:

方法1:

注意:TRUE会导致DLL引用计数加1FALSE不会改变引用计数,通常用FALSE  HMODULE GetCurrentModule(BOOL bRef/* = FALSE*/)  {      HMODULE hModule = NULL;      if (GetModuleHandleEx(bRef ? GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS : (GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS       | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT),    (LPCSTR)GetCurrentModule, &hModule))      {          return hModule;      }      return NULL;  }  

方法2:

    参考:http://blog.csdn.net/yaosan/article/details/3459756      HMODULE GetSelfModuleHandle()      {          MEMORY_BASIC_INFORMATION mbi;          return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0)                 ? (HMODULE) mbi.AllocationBase : NULL);      }  

======> DLL中如何获取自身的句柄 <======

1 0
原创粉丝点击