C程序中的C ++ dll

时间:2009-04-11 15:03:49

标签: c++ c dll

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

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

库中的头文件:

#ifndef __OBJ__H__
#define __OBJ__H__

#include <windows.h>  
#include <GL/gl.h>
#include <GL/glext.h>
#include <GL/glu.h>
#include <GL/glut.h>

#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...
}

在VS项目选项(链接器/输入/附加依赖项)中添加了文件.lib。 .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 : ')' 

甚至当我将&amp; 更改为*时出现:

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

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

2 个答案:

答案 0 :(得分:11)

参数“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...
}

答案 1 :(得分:3)

正如大卫指出的那样,C没有引用。

另外,取出extern“C”。 C没有用处也不知道它。

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

#ifdef __cplusplus
    extern "C" {
#endif

/* extern "C" stuff */

#ifdef __cplusplus
    }
#endif

在C中,不会定义__cplusplus。