2013-08-25 49 views
1

我有一個我想從另一個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 ...任何人都可以幫助我嗎?

+0

爲什麼你不能像調用第一個DLL一樣調用第二個DLL?究竟是什麼問題? – john

+1

調用LoadLibrary後檢查GetLastError。一個可能的原因可能是不同的Dll位,例如,試圖將32位Dll加載到64位進程。 –

回答

1

您可能會看到Dependency Walker。在配置文件模式中使用此工具將顯示您的二進制文件(EXE - DLL1 - DLL2)之間的依賴關係是否可以在運行時解決。

一個原因可能是:DLL1無法啓動,因爲找不到DLL2。

您還應該看看您導出Locale(extern「C」INT PASCAL EXPORT)的方式是否正確!

如前所述,您還應該看看GetLastError。