directshow 问题 找不到 atlthunk.lib

hawk_with_wind 2009-07-09 11:30:36
我以前没搞过directshow的项目。
这次用windows sdk + directx 9 feb 2005
代码需要头文件
#include <qedit.h>
#include <dshow.h>
#include <windows.h>
#include <atlbase.h>
#include <Streams.h>

依赖的库文件
strmiids.lib
Strmbasd.lib

编译时报错:
LINK : fatal error LNK1104: 无法打开文件“atlthunk.lib”

我找了半天机器上没有这个文件。网上也不知道到哪里下载。
网上有人说把atlbase.h里面一句pragma删掉就好了,可事实上atlbase.h里面没找到包含atlthunk.lib的pragma
还有人说做一个dummy lib改名字改成atlthunk.lib,我也试过,也不行。这样做就会招来几个未定义的外部符号错误。

我不知道该怎么办了,请各位高人帮忙啦。。
...全文
2978 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
xq2002909 2012-05-03
  • 打赏
  • 举报
回复
是么,试试看
popmailyz 2011-05-22
  • 打赏
  • 举报
回复
真的可以用了,18,19楼好神啊!
allanpk716 2010-09-09
  • 打赏
  • 举报
回复
我也遇到这个问题,不过看到19楼的回复已经解决,膜拜~!给出具体修改位置,给有困难的朋友解决。


其实是在你工程的stdafx.h 头文件中添加代码。
#if !defined(AFX_STDAFX_H__FABDF0CD_5E3B_4283_9637_DC27D95A1152__INCLUDED_)
#define AFX_STDAFX_H__FABDF0CD_5E3B_4283_9637_DC27D95A1152__INCLUDED_

// Change these values to use different versions
#define WINVER 0x0400
//#define _WIN32_WINNT 0x0400
#define _WIN32_IE 0x0400
#define _RICHEDIT_VER 0x0100

#include <atlbase.h>
#include <atlapp.h>

extern CAppModule _Module;
extern BOOL _isSysInstall;
extern char _passWord[256];
#include <atlwin.h>
#include "CoolControlsManager.h"

// 文件名为8.3格式
#define SERVICE_NAME _T("diskflt")


//在这添加*************************************************************
#pragma comment(linker, "/NODEFAULTLIB:atlthunk.lib")

#if (_ATL_VER < 0x0700)
namespace ATL
{
inline void * __stdcall __AllocStdCallThunk()
{
return ::HeapAlloc(::GetProcessHeap(), 0, sizeof(_stdcallthunk));
}

inline void __stdcall __FreeStdCallThunk(void *p)
{
::HeapFree(::GetProcessHeap(), 0, p);
}
};
#endif //(_ATL_VER < 0x0700)
//***************************************************************添加结束
mxf2000 2010-05-08
  • 打赏
  • 举报
回复
stdafx header file add the following content:

#define _WTL_SUPPORT_SDK_ATL3

// Support for VS2005 Express & SDK ATL
#ifdef _WTL_SUPPORT_SDK_ATL3
#define _CRT_SECURE_NO_DEPRECATE
#pragma conform(forScope, off)
#pragma comment(linker, "/NODEFAULTLIB:atlthunk.lib")
#endif // _WTL_SUPPORT_SDK_ATL3

// Support for VS2005 Express & SDK ATL
#ifdef _WTL_SUPPORT_SDK_ATL3
namespace ATL
{
inline void * __stdcall __AllocStdCallThunk()
{
return ::HeapAlloc(::GetProcessHeap(), 0, sizeof(_stdcallthunk));
}

inline void __stdcall __FreeStdCallThunk(void *p)
{
::HeapFree(::GetProcessHeap(), 0, p);
}
};
#endif // _WTL_SUPPORT_SDK_ATL3
Blackbean1986 2010-03-15
  • 打赏
  • 举报
回复
这个问题是解决了,可是另一个问题又出来了
变成找不到“libcp.lib”,再把这个屏蔽的话,就会出现很多无法辨识的
xx53687912 2010-03-07
  • 打赏
  • 举报
回复
请问楼主可以说下你的解决方法吗?? 我也遇到了~~ 那段代码要加到哪??  
superrafe 2009-11-27
  • 打赏
  • 举报
回复
加入上述代码只是告诉编译器这个问题不是问题,但是还是没有真正解决问题啊~~
yeyuanzhi2000 2009-07-16
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 hawk_with_wind 的回复:]
多谢!!
问题解决啦
[/Quote]
你是怎么解决的,能告诉我吗?我也正好遇到这样的问题。谢谢!!
hawk_with_wind 2009-07-13
  • 打赏
  • 举报
回复
多谢!!
问题解决啦
老邓 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 jiangsheng 的回复:]
去掉对atlthunk.lib 的引用。使用Visual C++ 2005或者更高版本中的ATL和MFC。

在Visual C++ 2005推出之前,应用户要求,微软在Platform SDK里面包含了ATL和MFC的预发布版使得他们可以编写64位的程序而不用等Visual C++ 2005推出。使用这个版本的ATL和MFC库的条件是用户同意在Visual C++ 2005推出之后使用正式版的ATL和MFC。

这个版本的ATL和MFC库在新版本的SDK中被移除了。新的项目应该使用正式版的ATL和MFC。
[/Quote]
哦,想起来了。
确实是这样。
看来所谓免费的ATL3.0,其实也是不免费的。WTL真可怜!
加上这句:
#pragma comment(linker, "/NODEFAULTLIB:atlthunk.lib")

然后,添加代码:
#include <atlbase.h>

#if (_ATL_VER < 0x0700)
namespace ATL
{
inline void * __stdcall __AllocStdCallThunk()
{
return ::HeapAlloc(::GetProcessHeap(), 0, sizeof(_stdcallthunk));
}

inline void __stdcall __FreeStdCallThunk(void *p)
{
::HeapFree(::GetProcessHeap(), 0, p);
}
};
#endif //(_ATL_VER < 0x0700)
蒋晟 2009-07-10
  • 打赏
  • 举报
回复
去掉对atlthunk.lib 的引用。使用Visual C++ 2005或者更高版本中的ATL和MFC。

在Visual C++ 2005推出之前,应用户要求,微软在Platform SDK里面包含了ATL和MFC的预发布版使得他们可以编写64位的程序而不用等Visual C++ 2005推出。使用这个版本的ATL和MFC库的条件是用户同意在Visual C++ 2005推出之后使用正式版的ATL和MFC。

这个版本的ATL和MFC库在新版本的SDK中被移除了。新的项目应该使用正式版的ATL和MFC。
Walf_ghoul 2009-07-09
  • 打赏
  • 举报
回复
不是我能做到的。。。
hawk_with_wind 2009-07-09
  • 打赏
  • 举报
回复
我的工程里面没有引用这个库。
肯定是加的哪个头文件里面包含了这个库。
根据网上的资料,应该是在atlbase.h里面。然而我没在这个头文件里面找到引用这个库的代码。
可能是这个头文件所包含的其他头文件引用了。
但是这些头文件包含关系很复杂,而文件又处于不同的文件夹下,搜索起来很麻烦。
我尝试过 Google desktop 和windows自带的内文搜索工具。
估计是因为没有做过那么详细的索引的关系。这两个工具都没有查出我想要的结果。
现在很郁闷啊。 。
想找一个做过相关开发的人。。问问他当时是怎么解决的。。
lingyin55 2009-07-09
  • 打赏
  • 举报
回复
在你的整个工程搜atlthunk.lib,看看哪里引用了,屏蔽掉试试。

[Quote=引用 6 楼 hawk_with_wind 的回复:]
回楼上。。我机器上也没有atl.h。。。
[/Quote]
hawk_with_wind 2009-07-09
  • 打赏
  • 举报
回复
回楼上。。我机器上也没有atl.h。。。
lingyin55 2009-07-09
  • 打赏
  • 举报
回复


安装完 Platform SDK 后,按照 MSDN 上 Using Visual C++ 2005 Express Edition with the Microsoft Platform SDK 一文配置好项目,满以为这次可以构建成功了。结果出来一个 LINK : fatal error LNK1104: cannot open file ‘atlthunk.lib’ 的错误。晕倒,M$ 的东东怎么这样?在本机上搜索了一阵,没有能找到此文件。于是祭起 google 大法,嘿嘿,还有人遇到过此问题,有方法说是要修改 atl.h ,屏蔽掉对 atlthunk.lib 的引用。照做,终于构建成功!严重 BS M$。
http://www.sybaseclub.org/blog/?p=123
hawk_with_wind 2009-07-09
  • 打赏
  • 举报
回复
不是啦。。
没有加载库但是用到了里面的函数,会报“未定义的外部变量”,我遇到的不是这个问题啦。。

现在的问题是,他自己加载的这个库,我都不知道他在什么地方加的。可是这个库文件"atlthunk.lib"在我的机器上根本找不到。。
我想知道这个库到什么地方去下载。。或者需要安装什么SDK包。。

我已经安装了windows SDK 6.1 和 directX 9 feb 2005, 然而这两个包里面都找不到这个库。。
大前置 2009-07-09
  • 打赏
  • 举报
回复
可能没有加载库

在头文件里
先import加载
hawk_with_wind 2009-07-09
  • 打赏
  • 举报
回复
楼上。。没看懂你说的什么意思啊。。

atlbase.h里面根本就找不到带有“atlthunk”片段的文本。。
大前置 2009-07-09
  • 打赏
  • 举报
回复
#import 库
加载更多回复(8)

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧