窗口 – 建立64位dll的警告

前端之家收集整理的这篇文章主要介绍了窗口 – 建立64位dll的警告前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
dll导出标题
extern "C"
void _declspec(dllexport) __stdcall foo();

.def文件

EXPORTS
foo         @1

当我通过64位构建配置构建dll时,我遇到这个警告.

warning LNK4197: export ‘foo’ specified multiple times; using first specification

但是如果我通过32位构建配置构建dll,则警告永远不会发生.
问题是什么?有什么不同.

在dll标题的界面中,我们通常使用这个技术,

#ifdef EXPORT_DLL
#define BASICAPI _declspec(dllexport)
#else
#define BASICAPI _declspec(dllimport)
#endif //_EXPORT_DLL

但是如果def文件也存在,当我们构建64位dll时,我们总是会遇到警告.
那么,我们应该写这样的代码吗?

#ifdef EXPORT_DLL
#define BASICAPI
#else
#define BASICAPI _declspec(dllimport)
#endif //_EXPORT_DLL

运作良好但这对我来说并不熟悉.
给我你的意见

为同一功能指定两次导出通常不是很好的做法.如果您已经有__declspec(dllexport),那么您不需要在.def文件中指定导出.相反,如果您的.def文件中列出导出,则不需要__declspec(dllexport).

我相信警告的原因是,在x86版本中,__declspec(dllexport)正在使用前导下划线导出装饰名称,但64位编译器不会使用前导下划线来装饰名称,从而导致重复.要验证这一点,您可以查看Dependency Walker中的32位DLL,您应该看到两个导出的函数“foo”和“_foo”.

原文链接:https://www.f2er.com/windows/363573.html

猜你在找的Windows相关文章