gpt4 book ai didi

c++ - 编译器警告 C4251 : Problem exporting a class in a *. dll

转载 作者:太空宇宙 更新时间:2023-11-04 12:19:58 26 4
gpt4 key购买 nike

编辑:请原谅我的笨拙,我以前从未实现过包装器 .dll! :S

我一直在修补一些最近发布的 Kinect 传感器黑客(即 OpenKinectOpenNI ),我现在正试图将功能包装在 *.dll 中以用于各种“测试” "我希望编写的程序。

到目前为止,我已经建立了一个 *.dll 项目并获得了很多库功能,但是我到处都收到 C4251 编译器警告。

在项目设置中,我静态链接了 OpenNI.lib 文件,到目前为止,我的库 header 如下所示:

#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 的东西,以便隐藏底层实现,这是不正确的吗?

最佳答案

因为你想隐藏你在你的实现中使用 xn 命名空间的事实,你不应该把它放在库头文件中。解决此问题的最简单方法是使用 pimpl idiom .

关于c++ - 编译器警告 C4251 : Problem exporting a class in a *. dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5634064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com