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, за который я хочу, чтобы кто-то еще ответил.

Другие вопросы по тегам