当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: (本文根据《Windows Shell扩展编程完全指南》改写)
 

 

    摘要:摘要:本文比较了visual c++所支持的三种动态链接库,列出了各自不同的特点和应用场合,详细地描述了三种动态链接库的建立和调用的方法。  关键字:动态链接库;导出函数;调用  引言  较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序的exe文件中,会产生一些问题:一个缺点是增加......
 ·使用md5校验和算法保护文件    »显示摘要«
    摘要: 近日要用到文件校验算法,查看了一下相关资料,得到以下理论与实践经验。一、理论部分:1、预备知识1.1什么是数据校验通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。1.2最简单的检验实现方法:最简单的校验就是把原始数据和待比较数据直接进行比较,看是否完全一样这种方法是最安全最准确的......


Shell扩展编程实现Windows2000桌面图标透明

(本文根据«windows shell扩展编程完全指南»改写)

开始编写上下文菜单 – 它该做些什么? 开头先让我们做简单一些, 只弹出一个对话框以表明当前的扩展能够正常地工作.我们把扩展关联到 .txt 文件, 因此当用户右键单击文本文件对象时扩展就会被调用. 使用 appwizard 开始 好吧, 让我们开始吧! 什么? 我还没告诉你怎样使用那些神秘的 shell 扩展接口?别着急, 我会边进行边解释的.我觉得先解释一下一个概念再紧接着说明示例代码,对理解例子程序会更简单一些. 当然我也可以把所有的东西都先解释完,然后再解释代码, 但我觉得这样做不能吸引人的注意力.不管怎么样, 向 vc开火,开始! 运行appwizard,生成一个名为simpleext 的 atl com 工程. 保留所有默认的设置选项,点击”完成”. 现在我们已经有了一个空的 atl工程,它可以编译并生成一个 dll, 但我们还需要添加shell扩展的 com 对象.在 classview 中, 右击 simpleext classes 条目, 选择 new atl object. 【程序编程相关:MFC程序员的WTL指南之属性页与向导

【推荐阅读:VC里面如何拆分含汉字与字母的字符串

hresult ishellextinit::initialize ( lpcitemidlist pidlfolder, lpdataobject pdataobj, hkey hprogid );

【扩展信息:MSComm控件属性大揭秘

在atl object wizard里, 第一页默认已经选择了 simple object , 所以单击 next 即可. 在第二页中, 在short name 文本框里输入 simpleshlext ,点击 ok. (其余的文本框会自动填充完.) 这样就创建了一个名为 csimpleshlext 的类,其包含了实现com对象最基本的代码. 我们将在这个类中加入我们自己的代码. 初始化接口 当我们的shell扩展被加载时, explorer 将调用我们所实现的com对象的 queryinterface() 函数以取得一个 ishellextinit 接口指针.该接口仅有一个方法 initialize(), 其函数原型为:

explorer 使用该方法传递给我们各种各样的信息.pidlfolder是用户所选择操作的文件所在的文件夹的 pidl 变量. (一个 pidl [指向id 列表的指针] 是一个数据结构,它唯一地标识了在shell命名空间的任何对象, 一个shell命名空间中的对象可以是也可以不是真实的文件系统中的对象.)pdataobj 是一个 idataobject 接口指针,通过它我们可以获取用户所选择操作的文件名.hprogid 是一个hkey 注册表键变量,可以用它获取我们的dll的注册数据. 在这个简单的扩展例子中, 我们将只使用到 pdataobj 参数.

要添加这个接口进 com 对象, 先打开simpleshlext.h 文件, 然后加入下列标红的代码:

#include "shlobj.h"#include "comdef.h"class atl_no_vtable csimpleshlext :public ccomobjectrootex, public ccomcoclass, public idispatchimpl,public ishellextinitbegin_com_map(csimpleshlext) com_interface_entry(isimpleshlext) com_interface_entry(idispatch) com_interface_entry(ishellextinit) end_com_map()

com_map是atl实现 queryinterface()机制的宏,它包含的列表告诉atl其它外部程序用queryinterface()能从我们的 com对象获取哪些接口. 接着,在类声明里, 加入initialize()的函数原型. 另外我们需要一个变量来保存文件名:


...   下一页
 ·win2k下的api函数的拦截    »显示摘要«
    摘要: 简介: api拦截并不是一个新的技术,很多商业软件都采用这种技术。对windows的api函数的拦截,不外乎两种方法,第一种是mr. jeffrey richter 的修改exe文件的模块输入节,种方法,很安全,但很复杂,而且有些exe文件,没有dll的输入符号的列表,有可能出现拦截不到的情况。第二种方法就是常用的jmp xxx的方法,虽然很古老,却很简单实用。 本文一介绍第二种方法在win2k......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE