这里有没有人有开发可以分享知识的IE扩展的经验?这将包括代码示例,或指向良好代码的链接,或流程文档或任何内容.
我真的很想这样做,但我正在用糟糕的文档,糟糕的代码/示例代码/缺乏它来打造巨大的墙.您可以提供的任何帮助/资源将不胜感激.
具体来说,我想从如何从IE扩展中访问/操作DOM开始.
编辑,更多细节:
理想情况下,我想种植一个工具栏按钮,当单击该按钮时,会弹出一个菜单,其中包含指向外部站点的链接.我还想根据某些条件访问DOM并在页面上植入JavaScript.
在IE扩展中保留信息的最佳方法是什么?在Firefox/Chrome /大多数现代浏览器中,您使用window.localStorage
,但显然使用IE8/IE7,这不是一个选项.也许是SQLite DB等?可以假设.NET 4.0将安装在用户的计算机上吗?
我不想使用Spice IE,因为我想构建一个与IE9兼容的.我也在这个问题上添加了C++标签,因为如果用C++构建一个更好,我可以做到.
假设我只使用它们用于"普通"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,MFC,Win32或CLR用于新的C++项目?
"ATL和MFC在两者之间做出决定有点棘手. [[不开玩笑!]] 我会引用你的MSDN页面进行选择,以便在它们之间作出决定."
显然,这不能回答我的问题.:)
http://www.codeguru.com/forum/archive/index.php/t-64778.html
等等
我目前观察到的(在过去几天内,在尝试学习两者时):
但它们之间似乎没有任何架构差异:
BEGIN_MSG_MAP
与BEGIN_MESSAGE_MAP
...大不了)CWnd
vs.CWindow
但是,如果除了编译时与运行时方面之外没有真正的区别,那么为什么它们都存在呢?其中一个不应该足够吗?
我在这里错过了什么?
我刚刚开始我的第一个C++项目.我正在使用Visual Studio 2008.它是一个单一窗体的Windows应用程序,可以访问几个数据库并启动WebSphere MQ事务.我基本上理解ATL,MFC,Win32(实际上我对它有点模糊)和CLR之间的差异,但我对如何选择感到茫然.
这些中的一个或多个是为了向后兼容吗?
CLR 是个坏主意吗?
任何建议赞赏.
编辑: 我为这个项目选择了C++,原因是我没有在帖子中介绍,这些并不完全是技术性的.所以,假设 C++是唯一/最佳选择,我应该选择哪个?
在MSVC中创建一个ATL项目似乎创建了一个而不是两个项目; 后者的名称与前者相同,但附加了PS名称.第二个项目的目的是什么?如何判断我是否需要它?
我开始在家里使用visual studio c ++ express 2008,但其中没有ATL.
如何将ATL添加到visual studio c ++ express 2008?
我正在将基于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.
我正在交换机器(在两台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 …
右单引号(U + 2019)与Apostrophe(U + 0027)
这两个字符有什么区别?
我遇到了这个问题,我使用CAtlString从资源文件加载字符串,在某些Windows安装中,LoadString在尝试加载包含U + 2019的字符串时失败,但它适用于其他一些Windows安装.U + 2019字符出现在我从Word复制的资源文件中的字符串中,U + 0027出现在我手工编码的stirng中.为什么LoadString(有时)会阻塞它?
我使用ATL(VS2008,所以ATL9 IIRC)来创建COM对象,并一直使用CComVariant
类(定义atlcomcli.h
)来管理VARIANT
类型.但是,还有一个VARIANT
名为的包装器_variant_t
.是否有任何区别CComVariant
,并_variant_t
和我应该使用哪一个?
同样,有两个BSTR
包装器 - CComBSTR
和_bstr_t
.再说一次,我应该选择哪个?为什么?
任何人都可以解释一下,CComPtr在CC中使用CComQIPtr有什么用?
CComPtr<ISampleInterface> Sample1;
CComQIPtr<ISampleInterface> Sample2;
Run Code Online (Sandbox Code Playgroud)