C函数没有被导出
在我完成了一个分配(其中一个必须实现一个Win32窗口)之后,我想将我的函数导出到一个dll 令人惊讶的是,链接者抱怨未引用的链接,尽管如此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 “
- __declspec(dllexport)/u declspec(dllimport)的定义和使用是正确的(或者像我在C++中习惯的那样)
- 库已正确指定给链接器
- 这些函数在dependency walker中可见
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.<