Предупреждение компилятора C4251: проблема экспорта класса в * .dll - PullRequest
1 голос
/ 12 апреля 2011

РЕДАКТИРОВАТЬ: простите меня за noobish-ness, я никогда не реализовывал оболочки .dll раньше!: S

Я немного повозился с некоторыми из недавно выпущенных хаков Kinect Sensor (а именно 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 ошибок.Я надеялся, что в приложении мне нужно будет только включить и связать с оберткой * .dll не все вещи OpenNI, чтобы скрыть базовую реализацию, это неправильно?

1 Ответ

1 голос
/ 12 апреля 2011

Поскольку вы хотите скрыть тот факт, что вы используете xn пространство имен в своей реализации, вы не должны помещать это в заголовочный файл библиотеки.Самый простой способ решить эту проблему - использовать идиому pimpl .

...