ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 77599|回复: 128

[分享] 一步步教你制作、使用dll(1)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-10-21 23:04 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:封装
一、名词解释:
DLL 的学名叫 动态链接库

二、它是干什么用的:
搜索一下有很完整详细的解释。这里,我只引用过来当中的一句话
“在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。”

三、制作自己的dll:
使用dll的意义
(以下来自MSDN)
节省内存和减少交换操作。很多进程可以同时使用一个 DLL,在内存中共享该 DLL 的一个副本。相反,对于每个用静态链接库生成的应用程序,Windows 必须在内存中加载库代码的一个副本。
节省磁盘空间。许多应用程序可在磁盘上共享 DLL 的一个副本。相反,每个用静态链接库生成的应用程序均具有作为单独的副本链接到其可执行图像中的库代码。
升级到 DLL 更为容易。当 DLL 中的函数发生更改时,只要函数的参数和返回值没有更改,就不需重新编译或重新链接使用它们的应用程序。相反,静态链接的对象代码要求在函数更改时重新链接应用程序。
提供售后支持。例如,可修改显示器驱动程序 DLL 以支持当初交付应用程序时不可用的显示器。
支持多语言程序。只要程序遵循函数的调用约定,用不同编程语言编写的程序就可以调用相同的 DLL 函数。程序与 DLL 函数在下列方面必须是兼容的:函数期望其参数被推送到堆栈上的顺序,是函数还是应用程序负责清理堆栈,以及寄存器中是否传递了任何参数。
提供了扩展 MFC 库类的机制。可以从现有 MFC 类派生类,并将它们放到 MFC 扩展 DLL 中供 MFC 应用程序使用。
使国际版本的创建轻松完成。通过将资源放到 DLL 中,创建应用程序的国际版本变得容易得多。可将用于应用程序的每个语言版本的字符串放到单独的 DLL 资源文件中,并使不同的语言版本加载合适的资源。
特别指出一点,对于excel来说,dll还有一个重要的意义,代码的安全性基本得到了保障。都说破解vba密码是一秒钟的事儿,破解dll可不是那么容易的事儿了。
四、自己制作dll
我们用VB6.0制作dll
首先,你的机器里要安装vb6.0。要是没有,就去下个安上,迅雷里多多...

[ 本帖最后由 HHAAMM 于 2009-10-21 23:16 编辑 ]

评分

6

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-10-21 23:05 | 显示全部楼层
1、(本帖里)图1 就是vb6.0在桌面的图标,双击它
2、弹出窗口后,先选择ActiveX DLL(图2的红框),再点击打开(图2的蓝框)
3、起个名字(图3蓝色框内文字改为 ABC)
4、先保存一下,桌面新建个文件夹,点击图3红框里的保存标志,弹出另存为对话框,选择桌面》双击刚刚建立的那个文件夹(图4蓝色框)》保存(图4红色框)》保存
5、写代码,模块里输入下面代码
Sub def()
  Dim EL As Object
  Set EL = GetObject(, "Excel.Application")
  With EL.ActiveSheet
     .Cells(1, 3) = .Cells(1, 1) & .Cells(1, 2)
  End With
  Set EL = Nothing
End Sub
(如图5所示)
6、点击文件(图5红色框),在出现的下拉菜单中点击 生成工程1.dll(k)...》(默认保存位置)点击确定
至此,Dll就制作完成了

四、使用dll
1、新建一个excel,A1单元格输入"你",B1单元格输入"好"
2、打开VBE,工具》引用》浏览》找到刚刚创建的文件夹 点击工程1.dll(图6)》点击打开》点击确定
3、插入一个模块,输入下面代码
Sub test()
    Dim a As New ABC
    a.def
    Set a = Nothing
End Sub
4、运行一下代码,C1单元格出现"你好"
至此,一个由制作到使用dll的简单示例全部完成

[ 本帖最后由 HHAAMM 于 2009-10-22 12:09 编辑 ]
图1.jpg
图2.jpg
图3.jpg
图4.jpg
图5.jpg
6.jpg

TA的精华主题

TA的得分主题

发表于 2009-10-21 23:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-10-21 23:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢版主。学习了。。

TA的精华主题

TA的得分主题

发表于 2009-10-21 23:27 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-10-21 23:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢版主分享。
辛苦。

TA的精华主题

TA的得分主题

发表于 2009-10-21 23:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主的标题是:
一步步教你制作、使用dll(1)

但楼主做的过程其实是使用VB做组件

其实,组件文件不一定是DLL文件,DLL文件也不一定是组件文件

如果真的要以这个标题写文章,则要从SDK、MFC、C++。。。。下手,而不是VB这样的东西

TA的精华主题

TA的得分主题

发表于 2009-10-21 23:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-10-21 23:48 | 显示全部楼层
本帖最后由 HHAAMM 于 2012-10-21 21:52 编辑
原帖由 ljw990485 于 2009-10-21 23:38 发表
楼主的标题是:
一步步教你制作、使用dll(1)

但楼主做的过程其实是使用VB做组件

其实,组件文件不一定是DLL文件,DLL文件也不一定是组件文件

如果真的要以这个标题写文章,则要从SDK、MFC、C++。。。。下 ...


下面这个链接有相关文章
http://www.china-askpro.com/msg6/qa07.shtml

MFC、C++弄不了::L

以.ocx为后缀名的ActiveX控件是一种比较特殊的DLL,它的基础是OLE和COM,是有交互界面的可视化控件,定义了控件的属性和方法,定义控件可引发的事件的响应。我们通常说的.DLL为后缀名的文件是一个包含函数和数据的模块集合,可以被其它应用程序共享的程序模块。

[ 本帖最后由 HHAAMM 于 2009-10-21 23:49 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-10-22 11:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
补充一点,vb编写出的dll是包含有com对象的dll
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 20:47 , Processed in 0.042909 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表