ATL7 + WTL7 编程,谁做过?请教2个问题 :)

nbb01 2002-08-01 07:40:53
最近想做一个嵌入IE的ActiveX,开发环境为Visual Studio.Net,遇到编译问题总解决不了:

1.先期测试,用向导生成了一个简单的ATL项目框架,因为想用(也必须得用)WTL7中的一些类,因此在stdafx.h中include <atlapp.h>,然后,代码中用到WTL的那个类(如CEdit、CPen、CDC等),我就include相应的.h文件,可是这样做后,总是编译无法通过,奇怪的是,错误指出未定义的符号都是ATL中的定义,而非WTL的。
请问ATL7是否可以和WTL7混合编程呢?看WTL的资料,应该是可以的啊。错误指出的未定义符号,向导都include进相应的ATL的.h了呀,还应该再做什么呢?

2. WTL的资料太少了,有什么网站、讨论组,或书籍可以参考?

...全文
29 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sunbo 2002-08-03
ATL7 still has _pModule, which can be used instead. Before including
WTL files, put this line:

#define _Module (*_pModule)

which will provide _Module required by the WTL.

If you want to use WTL features for module classes, then you can use
CAppModule for it.

Cheers,
Nenad

Those lines will be added if you create a COM server. ATL wizard expect
a COM project, so it is not useful to add them always.

// This is here only to tell VC7 Class Wizard this is an ATL project
#ifdef ___VC7_CLWIZ_ONLY___ CComModule CExeModule #endif

WTL7 supports both ATL3 and ATL7
Windows Template Library WTL 7.0 has been released and is now available
at:

http://www.microsoft.com/downloads/release.asp?releaseid=37728



回复
sunbo 2002-08-03
WTL7 CAppModule still derives from ATL3 CComModule rather than one of
the ATL7 CAtlModule classes. Is there a reason for this? Would there
be any advantage or disadvantage in converting CAppModule to derive from
CATLExeModule.


One main reason is because WTL still supports ATL 3 as well as ATL 7.
回复
nbb01 2002-08-02
to linghuye(令狐叶):

谢谢,果然是头文件include的顺序不对,应该是WTL的atlapp.h以及其它所用的头文件,必须放在stdafx.h的最后, 即必须在其中的
using namespace ATL; 之后。
WTL7的CString和ATL7的CString的冲突,可以通过定义宏_WTL_NO_CSTRING将WTL7的CString排除掉。 ATL & WTL的源码我还能看懂:)
你提供的网址很有用,我搜了一下,也就这些。


to sunbo() :

谢谢,是有一些宏要处理,希望还能得到你的帮助:)

另外,两位大侠,现在还有一个问题:

ATL向导为我生成了一个类并实例化,如下
class CMyCtrlModule : public CAtlDllModuleT< CMyCtrlModule >
{
public :
DECLARE_LIBID(LIBID_MyCtrlLib)
DECLARE_REGISTRY_APPID_RESOURCEID(IDR_MYCTRL, "{A0E375D4-7272-4B02-883E-BE53E5854FEC}")
};

CMyCtrlModule _AtlModule;


而ATL的atl.cpp中对CComModule类实例化
CComModule _Module;

这样,对模块类有两个实例化,会不会有问题?

我做这个控件,还远未到可用阶段(加入我原来写的一些代码,还有大量
的编译错误呢),估计后面还有很多问题。我先结贴,后面再向两位请教。

哦,别忘了帮着想想,两个实例化,会不会有问题?非常感谢啊!!


回复
sunbo 2002-08-02
我来说两句吧

WTL7 与Visual Studio 6.0兼容的很好。对于ATL7有一些宏定义必须要处理,造成编译无法通过。我看过这种文章,我试试帮你找找

回复
lwg7603 2002-08-02
1.不要用ATL项目框架!而是要用WTL项目框架!我记得WTL提供了一个向导的呀!
2.我想可能是_Module全局变量的声明问题?
先把把所有_Module的声明从
CComModule _Module ;
改成
CServerAppModule _Module;
试试吧!
回复
linghuye 2002-08-02
呵呵,演砸了.
1.WTL是ATL的扩展当然可以和ATL一起使用,不过你没有给出错误信息我也帮不了你.一般的原因是:a.头文件include的顺序不对,b.SDK版本不对,c.所定义的系WINVER _WIN32_WINNT _WIN32_IE,d.ATL7的CString与WTL冲突.

2.WTL的资料不多,但都很精,加上300多K的源代码,一眼看到底,对于一个熟练的Windows程序员是足够了.
1.必读:WTL Makes UI Programming a Joy
http://www.develop.com/downloads/wtlpart1.zip
http://www.develop.com/downloads/wtlpart2.zip
2.程序:www.codetools.com/wtl, 都很经典.
3.控件:http://www.viksoe.dk/code/
4.讨论组:yahoo, www.sellsbrothers.com

3.WTL框架是用来写应用EXE的,ATL框架是用来写COM的,分工多明确.
回复
nbb01 2002-08-02
to lwg7603:谢谢你的回复:)

不过,我想你没有理解我的意思,我是要生成一个在IE中使用的ActiveX,而用WTL的向导,只能生成普通的应用程序和COM server 啊,所以必须用ATL项目框架,用WTL做为辅助类。这样的要求,您还有什么高招吗?
回复
发帖
ATL
创建于2007-09-28

3214

社区成员

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
申请成为版主
帖子事件
创建了帖子
2002-08-01 07:40
社区公告
暂无公告