ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E文精选 > Excel VBA > 来个见面礼,一步步教你制作、使用dll(1)

来个见面礼,一步步教你制作、使用dll(1)

作者:绿色风 分类: 时间:2022-08-17 浏览:178
楼主
HHAAMM
一、名词解释:
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。要是没有,就去下个安上,迅雷里多多...
2楼
HHAAMM
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 EB = 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的简单示例全部完成图1.jpg
 
图2.jpg
 
图3.jpg
 
图4.jpg
 
图5.jpg
 
6.jpg
 
3楼
poorsol
这个帖子很不错!
4楼
laoyebin
不错的教学贴,郝兄辛苦了
5楼
freelegend
嘻嘻 学到.也希望自己能够用到
6楼
大海情怀
很好,值得学习!
7楼
wenshui2006
值得学习,,,,,
8楼
wnianzhong
谢谢,这个要好好学习一下了.
9楼
wnianzhong
什么时候再见你的大作!
10楼
xiongkehua2008
真是不错的图示教材,对菜鸟很有参考价值呀。
11楼
lrlxxqxa
看不懂。看来我太菜了
12楼
lrlxxqxa
看不懂。看来我太菜了
13楼
yukaiwz
谢谢您!我们又进入了一个新的领域
14楼
赵文竹
留印慢慢学习……
15楼
wangqilong1980
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 EB = 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的简单示例全部完成
16楼
wqfzqgk
太简单了一点
,最好是做成插件的形式,看我的头像的样式
17楼
海洋之星
很不错,学习了,哈哈
18楼
远古石器
19楼
mjgdxx
vba密码如何破解呢?
20楼
zqm1847
不错,学学
21楼
7786910
郝兄辛苦了
22楼
空气
谢谢
23楼
liuguansky
学习下封装技术
24楼
豆子修罗
ok
25楼
7786910
谢谢分享,学习了。
26楼
engyoho
学习中,谢谢!
27楼
renrg68
值得学习
28楼
qinhuan66
好好学习天天向上
29楼
yz1995
赞一个,不错,好好学习
30楼
hjinshanz
图文并茂,很好的教程。
31楼
qinhuan66
好好学习天天向上
32楼
dragonet16
下面这段代码封装成dll调用时,只弹出对话框,其部分没有效果,不知道问题出在哪儿,请大侠们多大指教。
Sub cjt()
On Error Resume Next
Dim xl As Excel.Application
Dim xlbook As Workbook
Dim xlsheet As Worksheet
Dim dr, t As String
Dim i, j As Integer
Set xl = New Excel.Application
Set xlbook = xl.ThisWorkbook
Set xlsheet = xlbook.ActiveSheet
dr = xl.ActiveCell.Address & ":A65536"
i = Excel.Application.WorksheetFunction.CountA(Range(dr))
t = MsgBox("是否选择首条标题所在行?否则会造成误操作!", vbOKCancel + 32, "操作提示")
If t = vbOK Then
For j = 1 To i - 2
xlsheet .ActiveCell.Rows("1:1").EntireRow.Select
xlsheet .Selection.Copy
xlsheet .ActiveCell.Offset(2, 0).Rows("1:1").EntireRow.Select
xlsheet .Selection.Insert Shift:=xlDown
xlsheet .ActiveCell.Select
Next j
End If
End Sub
33楼
芐雨
对菜鸟很有参考价值呀。
34楼
poiuyman5
skillful

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap