VC2008 一个关于WIA的LNK2001: unresolved external symbol异常
发布时间:2011-06-23 14:27:27 文章来源:www.iduyao.cn 采编人员:星星草
VC2008 一个关于WIA的LNK2001: unresolved external symbol错误
我的环境是 VS2008 SP1 + XP SP3, 本来打算写一个基于WIA的摄像头程序,所以这两天就把MSDN里的"Win32 and COM"->"Graphics and Multimedia"->"Windows Image Acquisition"->"WIA" 完完全全的看了一遍。然后试着按它里面的 "WIA Tutorial"把样本代码直接复制出来,想罗列一下当前系统里的 WIA Device, 结果发现编译能通过,但是老是报 error LNK2001: unresolved external symbol _CLSID_WiaDevMgr2,分析了半天,"WIA.H" 也是指向的正确的 VS2008 6.0A 的SDK,没有问题,我的源码里也已经加了 "windows.h","wia.h", 但 unresolved external symbol 错误就是要出来,难道是 6.0A SDK 里的 wia.h 和 lib 文件不匹配?还是 WIA.H 有问题?
6.0A的SDK已经支持 Vista, 所以我看 wia.h 里根据 _WIN32_WINNT 来包含 wia_lh.h 或 wia_xp.h
#if (_WIN32_WINNT >= 0x0600) // Longhorn
#include <wia_lh.h>
#elif (_WIN32_WINNT >= 0x0501) // Windows XP
#include <wia_xp.h>
#endif
从windows.h 反向追踪到 sdkddkver.h, 里面定义的是 #define _WIN32_WINNT 0x0600, 所以可以确认是引用的 wia_lh.h, 在 wia_lh.h 里,我是可以看到
EXTERN_C const CLSID CLSID_WiaDevMgr2;
#ifdef __cplusplus
class DECLSPEC_UUID("B6C292BC-7C88-41ee-8B54-8EC92617E599")
WiaDevMgr2;
#endif
这种定义的, 所以就不知道为啥为有LINK ERROR.
源代码很短,基本上就是从 MSDN 里 copy 出来的, 用的是 console 程序, 哪位如果有跟我相同的编译环境,可以帮我试试,看是不是一样的报错,能帮我解决问题就最好了。
#include "stdafx.h"
#include <windows.h>
#include <wia.h>
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
BOOL bOsVistaOrLater;
IWiaDevMgr **ppWiaDevMgr;
IWiaDevMgr2 **ppWiaDevMgr2;
HRESULT hr;
ppWiaDevMgr = NULL;
ppWiaDevMgr2 = NULL;
//Identify the OS version, XP or earlier use WIA interface, Vista or later will use WIA2 interface
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
return 1;
if ( osvi.dwMajorVersion >= 6 && osvi.dwMinorVersion > 0 )
bOsVistaOrLater = true; //Vista later
else if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 )
{
if( osvi.wProductType == VER_NT_WORKSTATION )
bOsVistaOrLater = true; //Vista
else bOsVistaOrLater = false; //Windows Server 2008
}
else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
bOsVistaOrLater = false; //Windows 2000
else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
bOsVistaOrLater = false; //Windows XP
else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
bOsVistaOrLater = false; //Windows Server 2003
else
bOsVistaOrLater = false; //Windows 98/Me/NT, etc...
//Create WIA Device Manager Object
*ppWiaDevMgr = NULL;
*ppWiaDevMgr2 = NULL;
if ( bOsVistaOrLater = false )
hr = CoCreateInstance( CLSID_WiaDevMgr, NULL, CLSCTX_LOCAL_SERVER, IID_IWiaDevMgr, (void**)ppWiaDevMgr );
else
hr = CoCreateInstance( CLSID_WiaDevMgr2, NULL, CLSCTX_LOCAL_SERVER, IID_IWiaDevMgr2, (void**)ppWiaDevMgr2 );
if (!SUCCEEDED(hr)) return 2;
IEnumWIA_DEV_INFO *pWiaEnumDevInfo = NULL;
if (bOsVistaOrLater = false)
hr = (*ppWiaDevMgr)->EnumDeviceInfo( WIA_DEVINFO_ENUM_LOCAL, &pWiaEnumDevInfo );
else
hr = (*ppWiaDevMgr2)->EnumDeviceInfo( WIA_DEVINFO_ENUM_LOCAL, &pWiaEnumDevInfo );
if (!SUCCEEDED(hr)) return 3;
while (S_OK == hr)
{
IWiaPropertyStorage *pWiaPropertyStorage = NULL;
hr = pWiaEnumDevInfo->Next( 1, &pWiaPropertyStorage, NULL );
if (hr == S_OK)
{
//
// Declare PROPSPECs and PROPVARIANTs, and initialize them to zero.
//
PROPSPEC PropSpec[11] = {0};
PROPVARIANT PropVar[11] = {0};
//
// How many properties are you querying for?
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
关于visual studio 2005的工程文件*.vcproj的问题
请问:Visual Studio 2005 新建一个工程之后,会自动生产一个*.vcproj的一个文件,这...
-
用MFC画图的问题
我现在要用随机数产生300个固定的点保存在数组中,并在ondraw里画出这300个点,而且通过定时器使这300个点做运动。...
-
VS2010中的C++怎么连接数据库?
之前一直用VC++6.0的、现在想学学用最新的VS、但是感觉连接数据库和之前不一样了、具体应该怎么弄...
-
CLI编程 高手帮忙
我现在用C++/CLI 混编,
我有一个方法, 是调用一个C 的类库 得到一个 char * 的值
现在我...
-
新手求教::VC.NET2003里面的"添加变量"菜单变灰了,怎么弄?
最近学着用.net写程序,以前用的是6.0,不知道为什么我设计的EDIT Con...
-
刚学习vc.net 请教一个String做参数的问题,请高手指教一下
下面的代码为什么不能编译呢,出现这个错误呢
.\clr.cpp(12) : error C3...
-
VS2003中通过ADO取SQL2003中bigint 负值变正值的问题,求助!
在SQL2003中 数据库中假设 一个bigint类型的数据位-1234这样的值,通过如...
-
新手学习VC用那个版本的编译器好!
新手学习VC用那个版本的编译器好!?
------解决方案--------------------
VC++6.0
------解决...
-
正则表达式
有这样的字符串
"1,',2"",3"
希望将单个的"替换成单引号,将连续两个的""替换成一个双引号。
正则表达式该如何写。
...
-
为什么<<精通MFC>>附带的源程序不能编译成功
vc2010编译后有两个错误提示,分别如下,
错误一:
1>c:\program files\microsoft vi...