未导出的 C 函数

C Functions not being exported

完成一个必须实现 Win32 的作业后 window,我想将我的函数导出到一个 dll。

令人惊讶的是链接器抱怨未引用的链接,虽然

链接器总是抱怨(德语):

error LNK2019: Verweis auf nicht aufgel÷stes externes Symbol ""__declspec(dllimport) struct cw_Window * __cdecl createWindow(char *,unsigned short,unsigned short)" (__imp_?createWindow@@YAPEAUcw_Window@@PEADGG@Z)" in Funktion "main". C:\Users\jkirs\Desktop\Workspace\MSVC2015_x86_64-release\Unit.MSVC2015-x86-64.88a6cdd3\intermediate.Unit.exe : fatal error LNK1120: 1 nicht aufgel÷ste Externe

我的函数原型定义如下:

typedef struct cw_Window    cw_Window_t;
typedef struct cw_Event     cw_Event_t;

API cw_Window_t*    createWindow(char* pTitle, uint16_t nWidth, uint16_t nHeight);
API void            destroyWindow(cw_Window_t* pWindow);
API void            pollEvent(cw_Window_t* pWindow, cw_Event_t* pEvent);

其中 "API" 定义如下:

#ifdef _MSC_VER
    #ifdef CW_EXPORT
        #define API __declspec(dllexport)
    #else
        #define API __declspec(dllimport)
    #endif
#else
    #define API // TODO
#endif

我也尝试将 'extern "C" 添加到 'API' 定义中,但没有结果,但抱怨字符串文字 'C'.

有没有人自己遇到过这个问题并能指出正确的方向?

如果重要的话:我是uinsg Visual Studio C++ 2015 (MSVC_x86_64);我的头文件以“.h”结尾,源文件以“.c”结尾。

编辑: 该库应该再次用于 C 代码。

看来你知道extern "C"的基本问题和近似解。但是你的错误是:不要把 extern "C" 放在 API 定义中。用它包装定义和声明:

typedef struct cw_Window    cw_Window_t;
typedef struct cw_Event     cw_Event_t;

extern "C" {
API cw_Window_t*    createWindow(char* pTitle, uint16_t nWidth, uint16_t nHeight);
API void            destroyWindow(cw_Window_t* pWindow);
API void            pollEvent(cw_Window_t* pWindow, cw_Event_t* pEvent);
}

我知道它看起来像 extern 并且您正在尝试放置 extern 似乎是一个明智的地方,但是 extern "C" 是具有不同规则的不同野兽;你可以在这里阅读更多关于它的内容 In C++ source, what is the effect of extern "C"?

毕竟,我所做的一切都很好,但构建系统除外。 事实证明构建系统将文件作为 C++ 源文件而不是普通 C 文件处理。