Я учусь загружать DLL-файлы во время выполнения и вызывать функции оттуда.Для начала я решил выбрать математическую функцию cosf
.После некоторых поисков я узнал, что все математические функции можно найти в msvcr100.dll
.Итак, вот код, который я написал:
#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. - Кажется, что имя функции не искажено.
- И "cos", и "cosf" перечислены в справочнике функций библиотеки времени выполнения: http://msdn.microsoft.com/en-us/library/ydcbat90.aspx
Чего мне не хватает?Если я должен использовать другую DLL для cosf
- что это?cos
принимает удвоения, мне нужна функция, которая принимает поплавки.
Спасибо!