您的位置:首页 > 产品设计 > UI/UE

OPENCV的highgui工程在vc6.0下编译出错的解决

2016-02-05 10:20 483 查看
【原文:http://www.cnblogs.com/oskycar/archive/2009/08/30/1556924.html

最近在论坛里发现有很多人提出如下的问题:

怎么按照网站上那个安装方法安装了,但调试运行怎么会出错啊? 

错误是: 

error C2065: 'GetWindowLongPtr' : undeclared identifier 

C:\Opencv1.0\OpenCV\otherlibs\highgui\window_w32.cpp(243) : error C2065: 'GWLP_USERDATA' : undeclared identifier 

C:\Opencv1.0\OpenCV\otherlibs\highgui\window_w32.cpp(432) : error C2065: 'SetWindowLongPtr' : undeclared identifier 

C:\Opencv1.0\OpenCV\otherlibs\highgui\window_w32.cpp(828) : error C2065: 'GetClassLongPtr' : undeclared identifier 

C:\Opencv1.0\OpenCV\otherlibs\highgui\window_w32.cpp(828) : error C2065: 'GCLP_HBRBACKGROUND' : undeclared identifier 

C:\Opencv1.0\OpenCV\otherlibs\highgui\window_w32.cpp(972) : error C2065: 'GCLP_HCURSOR' : undeclared identifier 

C:\Opencv1.0\OpenCV\otherlibs\highgui\window_w32.cpp(1253) : error C2065: 'GWLP_WNDPROC' : undeclared identifier

一直以来都在用vs.net所以一直没有这类问题。今天为了在一个低端的本本上安装vc6.0和opencv让我费很大的力气才弄明白。

其实是highgui目录下的window_w32.cpp宏定义出现的问题, 

#if defined WIN64 || defined EM64T 

上面这个宏判断其实应该是返回FALSE才对。但是由于6.0的编译的问题它这里就编程true了,因而执行了下面的宏定义

#define icvGetWindowLongPtr GetWindowLongPtr 

#define icvSetWindowLongPtr( hwnd, id, ptr ) SetWindowLongPtr( hwnd, id, (LONG_PTR)(ptr) ) 

#define icvGetClassLongPtr GetClassLongPtr 

#define CV_USERDATA GWLP_USERDATA 

#define CV_WNDPROC GWLP_WNDPROC 

#define CV_HCURSOR GCLP_HCURSOR 

#define CV_HBRBACKGROUND GCLP_HBRBACKGROUND

GetClassLongPtr这些函数应该不是win32的程序,而是win64的程序,因此才会出错。

解决方法是把#if defined WIN64 || defined EM64T随便改成一个系统不认识的,没有定义过的宏就

行了。如: 改成#if defined WIN642 || defined EM64T 。或者干脆注释调上面的全部内容。

对于opencv1.0 版本改过之后就可以编译_make里面的opencv.dsw 里面的highgui.dsp了。对于

5.0beta版本,可能要先把OpenCV\otherlibs\_graphics\src下面的graphic_libs.dsw编译后才能编译

highgui.dsp(呵呵,今天把所以版本都试了一遍)

如果以上编译全部通过,可能还要配置一下环境变量,如:d:\Program Files\OpenCV\bin; 如果不配

置的话会出现找不到coxcore100.dll等文件的错误。vs.net下就不会有以上的麻烦。

 

如果又出现类似tiff,png,jpeg等错误,则需要编译opencv的附加库,目录在:

C:\Program Files\OpenCV\otherlibs\_graphics\src
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: