我正在学习如何在运行时加载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表示mangled.
cosf函数。序号1349,入口点0xC2750。在运行时库函数引用中列出了函数名似乎不是mangled.
我遗漏了什么?如果我应该为cosf使用不同的动态链接库--哪一个是?cos需要双倍的函数,需要一个浮点函数。
谢谢!
发布于 2012-02-20 11:37:18
来自<math.h>头文件:
inline float cosf(_In_ float _X)
{return ((float)cos((double)_X)); }换句话说,它是一个实际使用cos()的内联函数。因此不会从DLL导出。
https://stackoverflow.com/questions/9359421
复制相似问题