DLL:当 SDK header 文件不使用它时,我可以使用 __declspec(dllexport)

DLL: Can I use __declspec(dllexport) when SDK header file doesn't use it

我正在使用一个 SDK,它希望我的 DLL 导出一些函数。 SDK 提供了一个 header 文件,像这样导出函数:

#ifdef __cplusplus
extern "C" {
#endif

    HRESULT extern WINAPI Foobar();

#pragma pack(pop)

#ifdef __cplusplus
}    /*extern "C"*/
#endif

https://github.com/sergiofst/wosa-xfs-spi-base-framework/blob/master/depends/INCLUDE/XFSSPI.H

我的问题是,我没有找到如何在提供商 (dllexport) 端使用这个 header,因为每次我尝试添加 __declspec(dllexport):

__declspec(dllexport) HRESULT WINAPI Foobar() {
...
}

我得到 error C2375: 'Foobar': redefinition; different linkage

那么有什么方法可以使用 SDK 提供的 header 文件,还是我必须使用 def 文件或 copy/edit 函数定义?

此致。

最简单、最愚蠢、最明显的方法是将头文件复制到您的项目中并向其添加 dllexport。

下一个方法是在实现该方法的文件中不包含头文件。

然后是我希望其他人回答的 .def 文件。

或者您可以尝试将 /EXPORT:Foobar 添加到 link.exe 命令行。 有关详细信息,请参阅 https://docs.microsoft.com/en-us/cpp/build/reference/export-exports-a-function