描述:
编译通过,链接时出现以下错误:
viedeoseach error LNK2019: 无法解析的外部符号 "int __cdecl wsprintfWInternal(wchar_t *,wchar_t const *,...)" (?wsprintfWInternal@@YAHPA_WPB_WZZ) ,该符号在函数 "long __cdecl AddGraphToRot(struct IUnknown *,unsigned long *)" (?AddGraphToRot@@YAJPAUIUnknown@@PAK@Z) 中被引用
请问怎么解决?
分不够再加,急!
解决方案1:
http://blog.joycode.com/jiangsheng/archive/2003/11/14/6631.aspx
sample:
我遇到的问题原因是这样的:
lstrlenWInternal定义于DX90SDK\Samples\C++\DirectShow\BaseClasses\wxutil.h文件中
int WINAPI lstrlenWInternal( LPCWSTR lpString );
#ifndef UNICODE
#define wsprintfW wsprintfWInternal
#define lstrcpyW lstrcpyWInternal
#define lstrcpynW lstrcpynWInternal
#define lstrcmpW lstrcmpWInternal
#define lstrcmpiW lstrcmpiWInternal
#define lstrlenW lstrlenWInternal
#endif
而lstrlen定义为:
WINBASEAPI int WINAPI lstrlenA( IN LPCSTR lpString );
WINBASEAPI int WINAPI lstrlenW( IN LPCWSTR lpString );
#ifdef UNICODE
#define lstrlen lstrlenW
#else
#define lstrlen lstrlenA
#endif // !UNICODE
显然在使用DirectShow后DShow系统自定义了lstrlen并自己实现,当我需要使用DirectShow时产生了如上的现象,这也是为何同样的代码在测试项目中不存在问题的原因。
解决的方法:
1.不使用DirectShow(呵呵,开玩笑)
2.Link with Quartz.lib / Strmbase.lib(其实只需要这个就可以了,不过建议其他两个一起链接) / Strmiids.lib
3.确保Windows.h在dshow.h之后include