Не удается найти cosf в msvcr100.dll с помощью GetProcAddress - PullRequest
0 голосов
/ 20 февраля 2012

Я учусь загружать 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 принимает удвоения, мне нужна функция, которая принимает поплавки.

Спасибо!

1 Ответ

1 голос
/ 20 февраля 2012

Из заголовочного файла <math.h>:

inline float cosf(_In_ float _X)
        {return ((float)cos((double)_X)); }

Или, другими словами, это встроенная функция, которая на самом деле использует cos (). И, следовательно, не экспортируется из DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...