簡體   English   中英

使用LoadLibraryA的dll加載錯誤

[英]dll loading error using LoadLibraryA

我們正在嘗試使用LoadLibraryA函數從64位dll內部加載dll庫。 它返回126錯誤-找不到mod。 我們確定賦予該函數的dll文件路徑正確。

我們已經嘗試了一個虛擬dll進行測試,並且該dll可以正常工作,並且已加載。

我們還嘗試將dll(這是我們要加載的第一個dll的依賴項)添加到虛擬dll。 它也起作用。 因此,問題似乎與依賴項dll無關,而與我們首先要加載的原始dll有關。

我們還嘗試將dl轉換為64位,並嘗試這樣做,仍然沒有好處。

我們還使用Dependency Walker檢查了依賴性。 一切都好。

我們使用的操作系統是Windows 8、64位。 如果有什么不同。.有人對這個問題有任何想法嗎?

編輯:我們也嘗試了此代碼:

hModule = LoadLibraryW(L"C:\\temp\\dllToLoad.dll");

並收到以下錯誤代碼:

"First-chance exception at 0x00000000 in C_Test_TSMPPKCS11.exe: 0xC0000005: Access violation at location 0x0000000000000000."

編輯2:我們首先使用的代碼是:

hModule = LoadLibraryA((char*)aDLLFile);

編輯3:我們正在使用完整的路徑來加載dll。 為了對此進行測試,我們嘗試了以下代碼:

FILE *fp;
    int size = 0;
    fp=fopen("C:\\temp\\dllToLoad.dll", "r");
    size = fgetc(fp);
    printf("size:%d\n",size);
    fclose(fp);

沒問題,我們收到的文件大小為77。

我們還嘗試將dl轉換為64位,並嘗試這樣做,仍然沒有好處。

您無法將32位dll作為可執行代碼加載到64位進程中(並且由於要使用LoadLibraryA(),因此您可以嘗試這樣做)。

假設您要加載的dll與要加載的進程是同一類型,那么您是將完整路徑傳遞給LoadLibraryA()還是相對路徑,或者僅傳遞dll名稱? 如果您沒有使用完整的路徑,那么請考慮使用LoadLibraryEx(),因為這樣可以使您對使用的搜索路徑有更多的控制。 如果您使用的是完整路徑,如果無法加載dll,請嘗試使用常規文件操作打開文件,這行得通嗎? 如果可行,請嘗試使用帶有LOAD_LIBRARY_AS_DATAFILE的LoadLibraryEX(),看看是否會將dll作為簡單數據文件加載(證明它正在查找文件)。

運行Sysinternal的ProcMon並觀看代碼打開DLL,這可能會顯示相關的DLL加載失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM