有两个动态链接库,
A.dll
B.dll
置于同一目录下。A中有一个方法TestA,B中有一个方法TestB,TestA被调用时,TestA中要调用TestB,调用TestB时,要动态地加载B.dll,加载时要如何才能得到A和B所处的路径??也就是如何在一个dll中获取该dll所处的位置??
A.dll
B.dll
置于同一目录下。A中有一个方法TestA,B中有一个方法TestB,TestA被调用时,TestA中要调用TestB,调用TestB时,要动态地加载B.dll,加载时要如何才能得到A和B所处的路径??也就是如何在一个dll中获取该dll所处的位置??
否则,获得A的instance,然后调用GetModuleFileName
GetModuleFileName(AfxGetInstanceHandle(),(LPTSTR)(LPCTSTR)strExePath,MAX_PATH);
strExePath.TrimRight("\\***.exe"); //你的应用程序的名字
MessageBox(strExePath);
以上代码获取当前应用程序的目录,然后再根据你的dll所在的文件夹strExePath += "**",或者CString strDllName;
strDllName.Format("%s\\Dlls\\A.dll",strExePath); //这个就是你的dll文件地址
#if _MSC_VER >= 1300 // for VC 7.0
// from ATL 7.0 sources
#ifndef _delayimp_h
extern "C" IMAGE_DOS_HEADER __ImageBase;
#endif
#endifHMODULE GetCurrentModule()
{
#if _MSC_VER < 1300 // earlier than .NET compiler (VC 6.0) // Here's a trick that will get you the handle of the module
// you're running in without any a-priori knowledge:
// http://www.dotnet247.com/247reference/msgs/13/65259.aspx MEMORY_BASIC_INFORMATION mbi;
static int dummy;
VirtualQuery( &dummy, &mbi, sizeof(mbi) ); return reinterpret_cast<HMODULE>(mbi.AllocationBase);#else // VC 7.0 // from ATL 7.0 sources return reinterpret_cast<HMODULE>(&__ImageBase);
#endif
}
不然你的程序是如何加载DLL的呢?或者DLL与程序有固定的相对位置,这种情况的话,就先查找查找EXE程序的路径,然后从这个路径查找出DLL路径。
或者DLL在系统的环境变量所设置的某个目录下。是这种情况的话,就查看系统文件夹或其他path设置的位置。
只要有一定的查找规律,总是可以找到的。不过,大哥您的问题到底是哪一种呢?