如题。一个DLL,代码中没有DllMain函数,而自己的名字并不是固定的(可能会被修改)。那么如何在这个DLL中得到自己的HMODULE或者自己的文件路径和名字呢?先谢谢高人指教!

解决方案 »

  1.   

    DLL是你写的吗?是的话为什么不加上DllMain函数呢?
      

  2.   

    如果Dll是自己写的,可用在dll里面调用GetModuleFileName函数获得dll的全路径名称
    TCHAR szFilePath[MAX_PATH];
    GetModuleFileName(NULL, szFilePath, MAX_PATH);有了路径就可以用GetModuleHandle获得HModule
    HMODULE hszFilePath = GetModuleHandle(szFilePath);
      

  3.   

    xylicon
    GetModuleFileName(NULL, szFilePath, MAX_PATH); 
    这个得到的是调用他的exe的路径。不是dll的路径。
      

  4.   

    楼上的别误导人了。
    MSDN 说法:
    Handle to the module whose path is being requested. If this parameter is NULL, GetModuleFileName retrieves the path of the executable file of the current process. GetModuleFileName(NULL, szFilePath, MAX_PATH); 返回的是可执行程序的路径,一般来说是Exe的路径。
      

  5.   

    用下面的代码,在你的dll里面调用,可得到 dll 的module,测试过,可用
    HMODULE GetYourModule()
    { static HMODULE hModule = NULL;
    if ( hModule == NULL )
    {
    BOOL b =  GetModuleHandleEx(
    GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
    (LPCTSTR)(&hModule),
    &hModule
    );
    }return hModule ;
    }
      

  6.   

    GetModuleHandleEx 可以获取指定module路径
      

  7.   

    GetModuleHandleEx要windows XP以上才支持。
    也可以用VirtualQuery(pAddress,lpMBI,dwLength);
    其中pAddress是DLL内的任一地址(比如DllMain地址),然后lpMBI->AllocationBase里面就是此Dll的HMODULE了。(在winCE里面此值不是模块句柄。)
      

  8.   

    写个DLLMAIN 要好得多吧!
    方便,又简单.