clang [bcc32c 警告] 重新声明不应添加“dllexport”属性

时间:2021-04-24 21:03:04

标签: clang c++builder clang++

我正在创建一个 DLL 并导出一个 SimpleMAPI DLL 函数,其中一个函数签名如下:

extern "C" ULONG __declspec(dllexport) WINAPI MAPISendMail(LHANDLE lhSession, ULONG_PTR ulUIParam, lpMapiMessage lpMessage, FLAGS flFlags, ULONG ulReserved);

我正在使用 C++ Builder,使用 clang 编译器。编译器发出警告:

[bcc32c Warning]: redeclaration of 'MAPISendMail' should not add 'dllexport' attribute mapi.h(262): previous declaration is here

它可以编译并运行,但我对这个警告感到困扰。可以避免吗?

1 个答案:

答案 0 :(得分:0)

正如@RemyLebeau 指出的,发生警告是因为我包含了 标头。

如果正在创建 MAPI DLL(创建其他程序将使用的自己的 DLL 或导出 MAPI 函数),那么如果在他们自己的程序中实现 MAPI 支持,则所需的结构和 #define 将从将原始 mapi.h 文件转换为自定义头文件,然后将其包含在内。 #defineFLAGSMapiMessage 结构体。

如果正在使用 MAPI(因此使用从其他 DLL 或其他程序调用 MAPI 函数),则包含

因此,在创建仅包含所需结构和 #define 的自定义 mapidefs.h 文件后,问题现已解决。

StackOverflow 上也有这个 example