我有一个我想从另一个DLL中调用的DLL。我用这段代码制作了一个C ++ MFC DLL:
extern "C" INT PASCAL EXPORT Locale()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
typedef BOOL(WINAPI* LPFNDLLGetStringLabel)( CWnd *, int, LPTSTR , CWinApp *, LPSTR , LPCTSTR );
int bRes = 0; //false;
char achEvent[ 250 ];
HINSTANCE hDLL;
hDLL = LoadLibrary( L"C:\\1.dll" );
if ( hDLL != NULL )
{
CString ocStrInfo;
ocStrInfo += "Alfa";
ocStrInfo += ";";
ocStrInfo += "Alfa";
ocStrInfo += ";";
ocStrInfo += "Alfa";
LPFNDLLGetStringLabel lpfnDllFunc;
lpfnDllFunc = (LPFNDLLGetStringLabel)GetProcAddress( hDLL, "GetStringLabel");
if ( lpfnDllFunc )
if( lpfnDllFunc( NULL, 111, (LPTSTR)ocStrInfo.GetBuffer(), AfxGetApp(), achEvent, NULL )) {
return bRes=1;
}else{
return bRes=0;
}
FreeLibrary( hDLL );
}
}
以下代码调用第二个DLL,但它无法正常工作:
int main(){
HINSTANCE dllHandle = LoadLibrary(L"C:\\2.dll");
if(dllHandle == NULL ){
std::cout << "alarm";
}
typedef int(*Locale)(void);
FARPROC pTest = GetProcAddress(HMODULE (dllHandle),"Locale");
if(pTest == NULL ){
std::cout << "alarm";
}
Locale con = Locale(pTest);
int r= 1;
r =con();
cout << r;
FreeLibrary(dllHandle);
getchar();
return 0;
}
但是dllhandle等于null ......任何人都可以帮助我吗?
答案 0 :(得分:1)
您可以查看Dependency Walker。在配置文件模式中使用此工具将显示您的二进制文件(EXE-DLL1-DLL2)之间的依赖关系是否可以在运行时解析。
可能有一个原因:DLL1无法启动,因为找不到DLL2。
您还应该看看导出Locale(extern“C”INT PASCAL EXPORT)的方式是否正确!
如前所述,您还应该看看GetLastError。
答案 1 :(得分:0)
为了解决Windows中的库依赖关系问题,您可以使用procmon监视程序。见(http://technet.microsoft.com/en-ca/sysinternals/bb896645.aspx)