标签: atl

如何开始开发Internet Explorer扩展?

这里有没有人有开发可以分享知识的IE扩展的经验?这将包括代码示例,或指向良好代码的链接,或流程文档或任何内容.

我真的很想这样做,但我正在用糟糕的文档,糟糕的代码/示例代码/缺乏它来打造巨大的墙.您可以提供的任何帮助/资源将不胜感激.

具体来说,我想从如何从IE扩展中访问/操作DOM开始.

编辑,更多细节:

理想情况下,我想种植一个工具栏按钮,当单击该按钮时,会弹出一个菜单,其中包含指向外部站点的链接.我还想根据某些条件访问DOM并在页面上植入JavaScript.

在IE扩展中保留信息的最佳方法是什么?在Firefox/Chrome /大多数现代浏览器中,您使用window.localStorage,但显然使用IE8/IE7,这不是一个选项.也许是SQLite DB等?可以假设.NET 4.0将安装在用户的计算机上吗?

我不想使用Spice IE,因为我想构建一个与IE9兼容的.我也在这个问题上添加了C++标签,因为如果用C++构建一个更好,我可以做到.

c# c++ internet-explorer atl browser-extension

204
推荐指数
4
解决办法
8万
查看次数

MFC和ATL之间的根本区别是什么?

假设我使用它们用于"普通"GUI程序(没有COM,没有ActiveX,没有什么花哨的东西),我将在ATL和MFC之间看到的根本区别是什么,以帮助我找出使用哪一个?


我在网上做了一些搜索,但最终没有一个答案真的回答了我的问题:

  • http://msdn.microsoft.com/en-us/library/bk8ytxz5(v=vs.80).aspx:

    • "ATL是一种快速,简便的方法,可以在C++中创建COM组件并保持较小的占用空间.如果您不需要MFC自动提供的所有内置功能,请使用ATL创建控件."

      没有真正回答我的问题,因为:

      • 我不和COM合作.

      • 这是否意味着MFC 是不是快吗?为什么/怎么样?

    • "MFC允许您创建完整的应用程序,ActiveX控件和活动文档.如果您已经使用MFC创建了一个控件,您可能希望继续在MFC中进行开发.在创建新控件时,如果您不需要,请考虑使用ATL所有MFC的内置功能."

      也不回答我的问题,因为:

      • 我甚至不知道ActiveX 什么.

      • 看起来微软似乎不鼓励使用MFC,但我无法弄清楚原因.

      • MFC的"内置功能" 到底什么ATL没有提供?

    • 一般来说,这不能回答我的问题,因为它没有解释它们背后的缺点和原因.

因为直接或间接,一切似乎都链接回上一页:

目前观察到的(在过去几天内,在尝试学习两者时):

  • ATL基于模板或编译时多态.
    • ATL方法往往是非虚拟的,并且倾向于返回引用.
  • MFC基于虚方法或运行时多态.
    • MFC方法往往是虚拟的,并倾向于返回指针.

但它们之间似乎没有任何架构差异:

  • 两者都使用消息映射(BEGIN_MSG_MAPBEGIN_MESSAGE_MAP...大不了)
  • 两者都将Win32方法包装到类中
  • 两者似乎都有相似的类别CWndvs.CWindow

但是,如果除了编译时与运行时方面之外没有真正的区别,那么为什么它们都存在呢?其中一个不应该足够吗?

我在这里错过了什么?

c++ mfc atl visual-c++

106
推荐指数
3
解决办法
3万
查看次数

如何决定是否将ATL,MFC,Win32或CLR用于新的C++项目?

我刚刚开始我的第一个C++项目.我正在使用Visual Studio 2008.它是一个单一窗体的Windows应用程序,可以访问几个数据库并启动WebSphere MQ事务.我基本上理解ATL,MFC,Win32(实际上我对它有点模糊)和CLR之间的差异,但我对如何选择感到茫然.

这些中的一个或多个是为了向后兼容吗?

CLR 是个坏主意吗?

任何建议赞赏.

编辑: 我为这个项目选择了C++,原因是我没有在帖子中介绍,这些并不完全是技术性的.所以,假设 C++是唯一/最佳选择,我应该选择哪个?

c++ clr winapi mfc atl

68
推荐指数
4
解决办法
5万
查看次数

我的$ Foo ATL解决方案中的($ Foo)PS项目是什么?

在MSVC中创建一个ATL项目似乎创建了一个而不是两个项目; 后者的名称与前者相同,但附加了PS名称.第二个项目的目的是什么?如何判断我是否需要它?

c++ com atl visual-studio

25
推荐指数
3
解决办法
3311
查看次数

如何在Visual Studio c ++ express 2008中添加WTL和ATL

我开始在家里使用visual studio c ++ express 2008,但其中没有ATL.
如何将ATL添加到visual studio c ++ express 2008?

c++ wtl atl visual-studio

23
推荐指数
3
解决办法
4万
查看次数

在构建导出包含ATL :: CString成员的类的DLL时发出警告C4251

我正在将基于ATL的静态库转换为DLL,并且在使用ATL CString类(在atlstr.h中找到)的任何导出类上收到以下警告:

警告C4251:'Foo :: str_':类'ATL :: CStringT'需要让dll接口被'Foo'类的客户端使用

我正确地声明Foo该类是通过导出的__declspec(dllexport).这是一个我可以放心忽视的警告,还是我做错了什么?DLL项目设置被设置为与ATL动态链接,但这似乎没有任何区别.

例如:

#ifdef DLLTEST_EXPORTS
#define DLLTEST_API __declspec(dllexport)
#else
#define DLLTEST_API __declspec(dllimport)
#endif

// This class is exported from the DLLTest.dll
class DLLTEST_API Foo
{
public:
 Foo();
 CString str_; // WARNING C4251 HERE
};
Run Code Online (Sandbox Code Playgroud)

此DLL的所有客户端也将使用ATL.

c++ dll atl dllexport

21
推荐指数
3
解决办法
4万
查看次数

获取"无法打开包含文件:'atlbase.h':没有此类文件或目录"错误

我正在交换机器(在两台Windows 8.1笔记本电脑之间),刚刚从TFS加载了我正在处理的项目.在一台机器上它编译,另一台机器没有编译,并给出第一个错误

error C1083: Cannot open include file: 'atlbase.h': No such file or directory
Run Code Online (Sandbox Code Playgroud)

在两台笔记本电脑上,我运行的是Visual Studio Ultimate 2013.在第一台笔记本电脑上,我检查了它的位置atlbase.h,它C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include来自于Visual Studio 2012安装目录.在新机器上,我没有安装Visual Studio 2012,因此该目录C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include不存在.

其他人有类似的问题(例如Ramilol的问题),因为他们使用的是Visual Studio Express.我正在使用Ultimate.

它可能是一个环境变量问题(由raj raj建议),但我的include目录路径VC++ Directories$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSDK_IncludePath)必需的.

我的一般问题是"我该如何解决这个问题?" 但是我也有兴趣知道我如何检查并设置$(VCInstallDir)的值,因为C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include它确实存在atlbase.h(所以我很困惑,为什么它没有被拾取).

==========编辑1:重写==========

让我再说一遍这个问题.

我已经将一个Visual Studio 2013项目加载到TFS的新构建笔记本电脑上.它不会构建并给出错误error C1083: Cannot open include file: 'atlbase.h': No such file or directory …

c++ atl include-path visual-studio-2013

21
推荐指数
4
解决办法
2万
查看次数

右单撇号与撇号?

右单引号(U + 2019)与Apostrophe(U + 0027)

这两个字符有什么区别?

我遇到了这个问题,我使用CAtlString从资源文件加载字符串,在某些Windows安装中,LoadString在尝试加载包含U + 2019的字符串时失败,但它适用于其他一些Windows安装.U + 2019字符出现在我从Word复制的资源文件中的字符串中,U + 0027出现在我手工编码的stirng中.为什么LoadString(有时)会阻塞它?

windows unicode resources atl

19
推荐指数
1
解决办法
2万
查看次数

CComVariant与_variant_t,CComBSTR与_bstr_t

我使用ATL(VS2008,所以ATL9 IIRC)来创建COM对象,并一直使用CComVariant类(定义atlcomcli.h)来管理VARIANT类型.但是,还有一个VARIANT名为的包装器_variant_t.是否有任何区别CComVariant,并_variant_t和我应该使用哪一个?

同样,有两个BSTR包装器 - CComBSTR_bstr_t.再说一次,我应该选择哪个?为什么?

c++ com atl

18
推荐指数
2
解决办法
7913
查看次数

CComPtr在CC中使用CComQIPtr有什么用?

任何人都可以解释一下,CComPtr在CC中使用CComQIPtr有什么用?

CComPtr<ISampleInterface> Sample1;
CComQIPtr<ISampleInterface> Sample2;
Run Code Online (Sandbox Code Playgroud)

com atl smart-pointers visual-c++

18
推荐指数
2
解决办法
8580
查看次数