0
我在學習自己在運行時加載DLL文件並從那裏調用函數。 首先,我決定選擇數學cosf
函數。經過一番搜索後,我瞭解到所有的數學函數都可以在msvcr100.dll
中找到。因此,這裏是我寫的代碼:使用GetProcAddress在msvcr100.dll中找不到cosf
#include <stdio.h>
#include <Windows.h>
FARPROC getEntry(HMODULE &m, const char* name) {
FARPROC p=GetProcAddress(m, name);
if (!p) {
printf("Error: Entry %s not found\n", name);
printf("Error code: %d\n",GetLastError());
exit(1);
} else
printf("Entry %s loaded\n", name);
return p;
}
int main() {
HMODULE msvcr = LoadLibraryA("msvcr100.dll");
if (!msvcr)
printf("File msvcr100.dll not found\n");
else
printf("msvcr100.dll loaded\n");
FARPROC fun = getEntry(msvcr, "cos");
FARPROC fun2 = getEntry(msvcr, "cosf");
FreeLibrary(msvcr);
return 0;
}
如果我運行它,我得到以下的輸出:
msvcr100.dll loaded
Entry cos loaded
Error: Entry cosf not found
Error code: 127
爲什麼?
- 錯誤代碼127代表
ERROR_PROC_NOT_FOUND
- 找不到指定的過程。 - 根據Dependency Walker,MSVCR100.DLL中有一個
cosf
函數。序號1349,入口點0xC2750。 - 函數名似乎沒有被損壞。
- 兩個「導向」和「cosf」列在運行時庫函數參考:http://msdn.microsoft.com/en-us/library/ydcbat90.aspx
我缺少什麼? 如果我應該爲cosf
使用不同的dll - 哪一個是它? cos
需要雙打,我需要一個採用漂浮物的功能。
謝謝!
呃...我沒有檢查頭文件的內容。但是如果是這樣,爲什麼這個函數會出現在Dependency Walker中?它根本不應該存在於DLL中,或者......? – CygnusX1 2012-02-20 13:25:36
Dumpbin.exe/exports,我沒有看到它。有一個___libm_sse2_cosf導出,我不知道它是什麼。 – 2012-02-20 13:32:59
事實上,我沒有嘗試Dumpbin,我認爲Dependency Walker顯示了同樣的事情。但現在當我嘗試時,我發現這兩者之間存在顯着差異。謝謝! – CygnusX1 2012-02-20 13:52:57