C函数没有被导出

C函数没有被导出,c,visual-c++,dll,dllimport,dllexport,C,Visual C++,Dll,Dllimport,Dllexport,在我完成了一个分配(其中一个必须实现一个Win32窗口)之后,我想将我的函数导出到一个dll 令人惊讶的是,链接者抱怨未引用的链接,尽管如此 __declspec(dllexport)/u declspec(dllimport)的定义和使用是正确的(或者像我在C++中习惯的那样) 库已正确指定给链接器 这些函数在dependency walker中可见 链接器总是抱怨(德语): 错误LNK2019:Verweis auf nicht aufgel÷stes externes Symbol “

在我完成了一个分配(其中一个必须实现一个Win32窗口)之后,我想将我的函数导出到一个dll

令人惊讶的是,链接者抱怨未引用的链接,尽管如此

  • __declspec(dllexport)/u declspec(dllimport)的定义和使用是正确的(或者像我在C++中习惯的那样)
  • 库已正确指定给链接器
  • 这些函数在dependency walker中可见
链接器总是抱怨(德语):

错误LNK2019:Verweis auf nicht aufgel÷stes externes Symbol “”\uuuuu declspec(dllimport)结构cw\u Window*\uuuuuuu cdecl createWindow(char *,无符号短,无符号短)“(\uu imp\uu?createWindow@@YAPEAUcw\u Window@@PEADGG@Z)在Funktion“main”中。 C:\Users\jkirs\Desktop\Workspace\MSVC2015\u x86\u 64-release\Unit.MSVC2015-x86-64.88a6cdd3\intermediate.Unit.exe :致命错误LNK1120:1不正确

我的功能原型定义如下:

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);
#ifdef _MSC_VER
    #ifdef CW_EXPORT
        #define API __declspec(dllexport)
    #else
        #define API __declspec(dllimport)
    #endif
#else
    #define API // TODO
#endif
其中,“API”定义如下:

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);
#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”

有没有人亲自遇到过这个问题,可以为我指出正确的方向

<>如果它是重要的:我将VisualStudioC++ 2015(MSVCXX86Y64);我的头文件以“.h”结尾,源文件以“.c”结尾

编辑:
这个库应该在C代码中再次使用。

因此,您似乎知道使用外部“C”的基本问题和近似解决方案。但您的错误是:不要在API定义中放入
extern“C”
。用它包装定义和声明:

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”
是一种不同的野兽,有着不同的规则;你可以在这里读到更多关于它的信息

毕竟,除了构建系统,我做的一切都很好。 结果是,构建系统将文件作为C++源文件而不是普通C.<