我有一個我想從另一個DLL中調用的DLL。我做了一個C++ MFC DLL使用此代碼:用C++中的另一個DLL調用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 ...任何人都可以幫助我嗎?
爲什麼你不能像調用第一個DLL一樣調用第二個DLL?究竟是什麼問題? – john
調用LoadLibrary後檢查GetLastError。一個可能的原因可能是不同的Dll位,例如,試圖將32位Dll加載到64位進程。 –