1
編輯:原諒我的不高興,我從未實現過一個包裝器.dll! :S編譯器警告C4251:在* .dll中導出類時出現問題
我一直在擺弄了一下一些最近發佈的Kinect感應器的黑客(即OpenKinect和OpenNI),現在我想在* .DLL包裝的功能用於各種「試驗」我希望寫的程序。
到目前爲止,我已經建立了一個* .DLL項目,並得到了很多的庫功能,但是我得到C4251編譯器警告所有的地方。
在項目設置我已經得到了OpenNI.lib
文件靜態鏈接的,到目前爲止,我的庫的頭看起來像這樣:
#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;
};
而且我stdafx.h
文件包含:
#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>
現在的我我試圖創建一個Windows控制檯應用程序來測試庫,我得到了很多error C2653: 'xn' : is not a class or namespace name
錯誤。我希望在應用程序中,我只需要包含並鏈接到wrapper * .dll而不是所有的OpenNI東西,以隱藏底層實現,這是不正確的?
閱讀http://en.wikipedia.org/wiki/Opaque_pointer – Erik 2011-04-12 10:56:21
您是否已經在庫標頭中完成了#include「stdafx.h」的操作? – Asha 2011-04-12 11:05:08
不,它是在'LibKinect.cpp'文件中,因爲預編譯的頭文件必須是。我明白我要去哪裏錯了;我在'LibKinect.h'文件中的'xn ::'命名空間中存在對象,客戶端應用程序隨後包含這些對象,並且不知道'xn ::'**是什麼**。不過,對於如何最好地解決這個問題,我仍然有點困惑。 – Siyfion 2011-04-12 11:15:41