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

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

怎么按照网站上那个安装方法安装了,但调试运行怎么会出错啊?
错误是:
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

posted on 2009-08-30 23:00  oskycar  阅读(3884)  评论(0编辑  收藏  举报

导航