我正在学习自己在运行时加载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
为什么?
ERROR_PROC_NOT_FOUND
- 找不到指定的过程。cosf
函数。序号1349,入口点0xC2750。我错过了什么?
如果我应该为cosf
使用不同的dll - 它是哪一个?
cos
需要双打,我需要一个带浮点数的函数。
谢谢!
答案 0 :(得分:1)
来自<math.h>
标题文件:
inline float cosf(_In_ float _X)
{return ((float)cos((double)_X)); }
或者换句话说,它是一个实际使用cos()的内联函数。因此,不会从DLL导出。