1

編集:私の許しを許してください、私はこれまでラッパー.dllを実装したことがありません!:S

私は最近リリースされたKinectセンサーハック(つまりOpenKinectOpenNI)のいくつかを少しいじっていましたが、今は機能を* .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のものすべてが含まれるわけではないことを期待していましたが、これは正しくありませんか?

4

1 に答える 1

1

実装で名前空間を使用しているという事実を隠したいので、それをxnライブラリヘッダーファイルに入れないでください。この問題を解決する最も簡単な方法は、pimplイディオムを使用することです。

于 2011-04-12T12:32:13.393 に答える