DLL: могу ли я использовать __declspec(dllexport), когда заголовочный файл SDK не использует его
Я работаю с SDK, который ожидает, что моя DLL экспортирует некоторые функции. SDK предоставляет файл заголовка, например, из функций для экспорта:
#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), так как каждый раз, когда я пытаюсь добавить __declspec(dllexport)
:
__declspec(dllexport) HRESULT WINAPI Foobar() {
...
}
я получил error C2375: 'Foobar': redefinition; different linkage
,
Так есть ли способ, как я могу использовать файл заголовка, предоставленный SDK, или я вынужден использовать определение файла def или функции копирования / редактирования?
С наилучшими пожеланиями.
2 ответа
Или вы можете попробовать добавить /EXPORT:Foobar в вашу командную строку link.exe. Подробнее см. https://docs.microsoft.com/en-us/cpp/build/reference/export-exports-a-function.
Самый простой, глупый и очевидный способ - скопировать заголовочный файл в ваш проект и добавить в него dllexport.
Следующий метод - не включать файл заголовка в файл, реализующий этот метод.
Тогда есть файл.def, за который я хочу, чтобы кто-то еще ответил.