EDIT : 내 noobish-ness를 용서하십시오. 이전에 래퍼 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>
지금은 ' ve는 라이브러리를 테스트하기 위해 Windows 콘솔 앱을 만들려고했는데 error C2653: 'xn' : is not a class or namespace name
오류가 많이 발생했습니다. 나는 응용 프로그램에서 래퍼 * .dll을 모두 포함하고 링크해야만한다는 사실을 알고 있었기 때문에 기본 구현을 숨기려면 OpenNI의 모든 내용이 아닌가?
http://en.wikipedia.org/wiki/Opaque_pointer 읽기 – Erik
라이브러리 헤더에'#include "stdafx.h"'를 했습니까? – Asha
미리 컴파일 된 헤더가 있어야하므로'LibKinect.cpp' 파일에 없습니다. 나는 내가 잘못 가고있는 곳을 본다. 클라이언트 응용 프로그램에 포함 된'LibKinect.h' 파일의'xn ::'네임 스페이스에 객체가 있고 사실 xn ::'** **이 무엇인지 알지 못합니다. 그러나이 문제를 해결하는 가장 좋은 방법에 대해서는 아직 조금 혼란 스럽습니다. – Siyfion