如何解决VisualC –在标头中实现的DLL类未导出
- 创建一个“具有导出功能的动态链接库” 项目(
Test.vcxproj
)。 - 将预定义的类替换为下面的类。
- 删除预定义类和
#include "Test.h"
的实现。 - 构建。
- 在 Dependency Walker -> 什么都没有导出的情况下拖动DLL。
- 如果在CPP文件中使用标头或实现析构函数,则导出类。
很久以前,我已经注意到这种行为,但是我忘记了。今天,我很难理解它的发生。
我看不到为什么正常,因为标题是项目的一部分。
谢谢。
class TEST_API CTest
{
public:
virtual ~CTest() = 0 {}
};
解决方法
引用项目文件中的标题是红色的鲱鱼。实际上,您可以将其从基础工作示例中排除,一切仍然有效。正在处理的实际文件是.cpp文件。
当遇到类中使用的__declspec(dllimport)
和__declspec(dllexport)
属性时,DLL导入和导出由编译器生成(以后由链接器使用)。但是,由于没有.cpp文件包含头文件,因此编译器根本不会遇到您的类。因此,没有出口。
请注意,即使您的类最终出现在编译文件中,并且出现了导出操作,析构函数也会隐式地inline
,因此该库的用户可能(或者将不会100%确定)生成并使用自己的定义,而不是从DLL导入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。