我正在创建一个 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
它可以编译并运行,但我对这个警告感到困扰。可以避免吗?
答案 0 :(得分:0)
正如@RemyLebeau 指出的,发生警告是因为我包含了
如果正在创建 MAPI DLL(创建其他程序将使用的自己的 DLL 或导出 MAPI 函数),那么如果在他们自己的程序中实现 MAPI 支持,则所需的结构和 #define
将从将原始 mapi.h
文件转换为自定义头文件,然后将其包含在内。 #define
如 FLAGS
或 MapiMessage
结构体。
如果正在使用 MAPI(因此使用从其他 DLL 或其他程序调用 MAPI 函数),则包含
因此,在创建仅包含所需结构和 #define 的自定义 mapidefs.h
文件后,问题现已解决。
StackOverflow 上也有这个 example。