编译器警告C4251:在*.dll中导出类时出现问题
Compiler Warning C4251: Problem exporting a class in a *.dll
编辑:原谅我的笨拙,我以前从来没有实现过包装器。dll !: S
我一直在修补一些最近发布的Kinect传感器hack(即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的东西,以便隐藏底层实现,这是不正确的吗?
由于您想要隐藏在实现中使用xn
名称空间的事实,因此不应该将其放在库头文件中。解决这个问题最简单的方法是使用粉刺习语。
相关文章:
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- 发生此错误:在0x0F2BFB7C(基于.dll)时引发异常 尝试更改大小是问题吗?
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- C++ DLL 堆内存分配问题
- C++ DLL 运行时错误"abc.dll is not a valid WIN32 application" 。请帮助解决这个问题
- DLL 导出导致唯一指针出现问题
- 如何解决python35的问题.dll'没有找到?
- C++ API-MS-WIN-SERVICE-PRIVATE-L1-1-1.DLL依赖项问题
- 问题在具有依赖性时从其他路径上加载DLL的DLL
- 我的自定义 C++ DLL 的 C# 项目中的 DLL 端口有什么问题?
- 潜在 DLL 兼容性问题的摘要?
- 从C++调用 Delphi DLL IStream 参数的问题
- 清理跨越Windows DLL模块边界的堆分配资源时出现问题
- 在Windows Server 2003中注册dll时出现问题
- DLL和EXE中具有相同名称和父级但实现不同的类中的问题
- 在C 中的DLL中解决模板的问题
- 多个DLL的问题
- JNI 问题:DLL 中的文件句柄出现符号查找错误C++
- 如何避免Windows上多个CRT版本的问题(dll地狱重访?)
- 奇怪的编译问题- DLL不编译相同的一些机器上