EDIT: Forgive my noobish-ness, I haven’t ever implemented a wrapper .dll before! :S
I’ve been tinkering a bit with some of the recently released Kinect Sensor hacks (namely OpenKinect and OpenNI) and I’m now trying to wrap the functionality in a *.dll for use in various “test” programs that I hope to write.
So far I’ve set up a *.dll project and have got a lot of the library functionality in, however I’m getting C4251 compiler warnings all over the place.
In the project settings I’ve got the OpenNI.lib file statically linked, so far my library header looks like this:
#ifdef LIBKINECT_EXPORTS
#define LIBKINECT_API __declspec(dllexport)
#else
#define LIBKINECT_API __declspec(dllimport)
#endif
// This class is exported from the LibKinect.dll
class LIBKINECT_API CLibKinect
{
public:
CLibKinect(void);
~CLibKinect(void);
bool Init(void);
protected:
private:
xn::Context m_xContext;
xn::DepthGenerator m_xDepthGen;
};
And my stdafx.h file contains:
#pragma once
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
#include <XnOpenNI.h>
#include <XnCodecIDs.h>
#include <XnCppWrapper.h>
Now I’ve attempted to create a windows console app to test the library and I get lots of error C2653: 'xn' : is not a class or namespace name errors. I was hoping that in the application I would only have to include and link to the wrapper *.dll not all of the OpenNI stuff as well, so as to hide the underlying implementation, is this incorrect?
Since you want to hide the fact you are using
xnnamespace in your implementation, you should not put that in the library header file. The simplest way to solve this problem is to use the pimpl idiom.