C程序中的C ++ dll

我想用C ++代码创建一个dll库,并在C程序中使用它。 我只想导出一个函数:

GLboolean load_obj (const char *filename, GLuint &object_list); 

来自库的头文件:

 #ifndef __OBJ__H__ #define __OBJ__H__ #include  #include  #include  #include  #include  #if defined DLL_EXPORT #define DECLDIR __declspec(dllexport) #else #define DECLDIR __declspec(dllimport) #endif extern "C" GLboolean load_obj (const char *filename, GLuint &object_list); #endif // __3DS__H__ 

在.cpp(在库项目中)函数也声明为:

 extern "C" GLboolean load_obj (const char *filename, GLuint &object_list) { code... } 

文件.lib添加在VS项目选项(链接器/输入/附加依赖项)中。 .dll位于.exe所在的文件夹中。 当我编译C项目时 – 错误:

 Error 1 error C2059: syntax error : 'string' 

它是头文件中的“extern”C“”部分。

我试图将头文件更改为:

 extern GLboolean load_obj (const char *filename, GLuint &object_list); 

然后

 Error 1 error C2143: syntax error : missing ')' before '&' Error 2 error C2143: syntax error : missing '{' before '&' Error 3 error C2059: syntax error : '&' Error 4 error C2059: syntax error : ')' 

甚至当我改变了*出现时:

 Error 6 error LNK2019: unresolved external symbol _load_obj referenced in function _main main.obj 

我不知道为什么这是错的。 .lib .h和.dll已正确添加。

参数“ GLuint &object_list ”表示“在此处传递对GLuint的引用”。 C没有参考。 请改用指针。

 // declaration extern "C" GLboolean load_obj (const char *filename, GLuint *object_list); // definition GLboolean load_obj (const char *filename, GLuint *object_list) { code... } 

大卫指出,C没有参考。

另外,取出extern“C”。 C没有用途也不了解它。

如果您需要共享标题,请执行以下操作:

 #ifdef __cplusplus extern "C" { #endif /* extern "C" stuff */ #ifdef __cplusplus } #endif 

在C中,不会定义__cplusplus。