【发布时间】:2018-12-13 03:04:53
【问题描述】:
在我的作业项目中加载 DLL 时遇到问题。
这是头文件:
我省略了有效且与问题无关的代码。基本上,hinstLib 不是NULL,但是当Filter = (FILTPTR) GetProcAddress(hinstLib, "Filter"); 行被执行时,Filter 没有任何价值。对我来说,似乎是说找到了 DLL,但在 DLL 中找不到函数“Filter”,我不知道为什么,尽管我可能是错的。我仍然不明白其中一些是如何工作的。
这是 DLL:
有什么想法吗?非常感谢所有帮助!
- 詹姆斯
【问题讨论】:
-
我已将函数定义移动到存储在分配解决方案中的 SLL 项目中的单独 CPP 文件中,并且发生了同样的问题,就像所有行都低于
#include "stdafx.h" -
您是否验证了您的 DLL 导出了您期望的符号? IIRC
dumpbin.exe实用程序应该能够告诉你。 -
另外,为什么你的DLL的
.cpp文件有#ifndef _ASEXPORT?您的 DLL 的.cpp文件应该始终 正在导出。 (无论如何,它只是在重复filter.h的内容。)另外,_declspec看起来是错误的;它应该是带有两个下划线的__declspec,尽管这应该会产生编译错误。 -
@jamesdlin 我已经改变了这两个并且发生了同样的错误
-
GetProcAddress() 失败是完全正常的,导出函数的名称通常与其文档名称不同。仔细检查的基本方法是在 DLL 上运行 Dumpbin.exe /exports。如果您没有使用 .def 文件,则其名称为“_Filter”。
标签: c++ function dll function-pointers getprocaddress