点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 6280|回复: 3

MFC结合PCL编程主要事项

[复制链接]
发表于 2015-8-6 20:52:56 | 显示全部楼层 |阅读模式
本帖最后由 tyzaizl 于 2015-8-6 21:06 编辑

MFC结合PCL编程主要事项
田玉珍(长春光机所)
转载请注明出处(http://www.pclcn.org/bbs/forum.p ... tid=1514&fromuid=87
1.  fatal error LNK1104cannot openmfc120d.lib
解决方法:工程属性->C/C++->Command Line: Additional Option 添加 /D “_UNICODE”
2.  error C2589: '(' : illegal token on rightside of '::'以及C2988C2059
解决方法:加括号
  1.   minmax[0] = std::numeric_limits<double>::min ();
  2.   minmax[1] = std::numeric_limits<double>::max ();
  3. 改为:
  4.   minmax[0] = (std::numeric_limits<double>::min) ();
  5.   minmax[1] = (std::numeric_limits<double>::max) ();
复制代码
3.  3>E:\3DSource\VTK_5_10\VTK5.10.1\IO\vtkEnSightGoldBinaryReader.cxx(4055):error C2678: binary '==' : no operator found which takes a left-hand operand oftype 'std::basic_istream<char,std::char_traits<char>>' (or there isno acceptable conversion)
解决方法:if (this->IFile->read(dummy, 4) == 0)改成if (!this->IFile->read(dummy, 4))
4. VTK_MACRO_OPERATER(OSTREAM&)的错误
解决方法,将vtkOstreamMapper.hvtkOstreamMapper.cxx对应的声明和定义都注释掉。

5. 应用pcl_mfc_visualization.lib库完成MFC应用程序开发时,在利用picture control控件(该控件为CWnd类)生成pcl_visualizer窗口时,用vtkMFCWindow类初始化窗口,调用create函数时出现中断,具体函数如下:

  1. vtkMFCWindow::vtkMFCWindow(CWnd *pcWnd)
  2. {
  3.   this->pvtkWin32OpenGLRW = NULL;

  4.   // create self as a child of passed in parent
  5.   DWORD style = WS_VISIBLE | WS_CLIPSIBLINGS;
  6.   if(pcWnd)
  7.     style |= WS_CHILD;
  8.   BOOL bCreated = CWnd::Create(NULL, _T("VTK-MFC Window"),
  9.                                style, CRect(0, 0, 1, 1),
  10.                                pcWnd, (UINT)IDC_STATIC);

  11.   SUCCEEDED(bCreated);

  12.   // create a default vtk window
  13.   vtkWin32OpenGLRenderWindow* win = vtkWin32OpenGLRenderWindow::New();
  14.   this->SetRenderWindow(win);
  15.   win->Delete();

  16. }
复制代码
错误如图1
  1. file:afxwin1.inl
  2. line:21
  3. 发现是下面的断言语句报错:
  4. _AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
  5. {
  6. ASSERT(afxCurrentResourceHandle != NULL);//这里出错!
  7. return afxCurrentResourceHandle;
  8. }
复制代码
解决方法
问题出现原因:vtkMFC.dll编译过程中字符集与工程编译过程中选择的字符集不一致。两者必须同为Multi-Byte或者UNICODECreate()函数时传进去的窗口名的编码方式必须和其编译时一致。
5.  pcl版本差异的不同
  
PCL  1.6
  
PCL  1.8
  
#include <sensor_msgs/PointCloud2.h>
  
#include  <pcl/PCLPointCloud2.h>
  
pcl::fromROSMsg (cloud, cloud_xyz);
  
pcl::fromPCLPointCloud2(cloud,  cloud_xyz);
  
sensor_msgs::PointCloud2
  
pcl::PCLPointCloud2
  
  


6无法定位程序输入点,如图2

问题原因:环境混乱,多个pcl版本同时在环境变量中配置,而且应用程序首先找到的并不是你希望的版本。
解决方法:将想用的pcl版本路径在环境变量path中的位置放在其他pcl版本之前,或者修改其他版本文件夹名字,让系统找不到。
7. error C2661error C2661: “operator new” …
解决方法:将下面的宏定义注释掉,
  
//#ifdef _DEBUG
  
//#define new DEBUG_NEW
  
//#endif
  
8. 定义了pcl中类似boost智能指针但使用前未初始化:
  
pcl::PointCloud<pcl::PointXYZ>::Ptr  pcd_4_update;//定义
  
pcd_4_update =  pcl::PointCloud<pcl::PointXYZ>::Ptr (new  pcl::PointCloud<pcl::PointXYZ>);//初始化
  
错误如图3



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册加入PCL中国点云技术相关产学研社区

x
回复

使用道具 举报

发表于 2015-11-19 23:13:12 | 显示全部楼层
很有用,我遇到的好几个问题你都提到了。顺便问一下,pcl1.7.2的vtk6.2里有vtkMFCWindow.h吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-19 23:24:37 | 显示全部楼层
fy321 发表于 2015-11-19 23:13
很有用,我遇到的好几个问题你都提到了。顺便问一下,pcl1.7.2的vtk6.2里有vtkMFCWindow.h吗? ...

如果你不自己编译的话,应该没有,得自己编译安装
回复 支持 反对

使用道具 举报

发表于 2016-4-5 16:57:25 | 显示全部楼层
fy321 发表于 2015-11-19 23:13
很有用,我遇到的好几个问题你都提到了。顺便问一下,pcl1.7.2的vtk6.2里有vtkMFCWindow.h吗? ...

请问你的问题解决了么?我也遇到相同的问题了。。。
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-5-20 00:21 , Processed in 1.118147 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表