I’d like to create a dll library from C++ code and use it in C program. I’d like to export only one function:
GLboolean load_obj (const char *filename, GLuint &object_list);
Header file from library:
#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__
in .cpp (in library project) function is also declared as:
extern 'C' GLboolean load_obj (const char *filename, GLuint &object_list) { code... }
File .lib is added in VS project options (Linker/Input/Additional dependencies). .dll is in folder where .exe is. When I compile C project – error:
Error 1 error C2059: syntax error : 'string'
It is about part ‘extern ‘C’ ‘ in header file.
I’ve tried to change header file to:
extern GLboolean load_obj (const char *filename, GLuint &object_list);
then
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 : ')'
and even when I changed & to * appeared:
Error 6 error LNK2019: unresolved external symbol _load_obj referenced in function _main main.obj
I’ve no idea why it is wrong. .lib .h and .dll are properly added.
The parameter ‘
GLuint &object_list‘ means ‘pass a reference to an GLuint here’. C doesn’t have references. Use a pointer instead.