标题:[求助] 如何将自定义的函数做成dll文件[已解决]
只看楼主
wycl8
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-12-20
 问题点数:0 回复次数:10 
[求助] 如何将自定义的函数做成dll文件[已解决]

如何将自定义函数做成dll文件,可以在别的工程中直接引用。
VB能不能做呀,请高手门指教! 先谢谢了!

[此贴子已经被作者于2007-1-8 18:41:16编辑过]

搜索更多相关主题的帖子: dll 函数 定义 文件 
2006-12-26 07:05
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
得分:0 
写成ActiveX Dll就行了...
新建一下工程..然后选择ActiveX Dll就可以.

我的msn: myfend@
2006-12-26 09:18
学习VB才2天
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1653
专家分:0
注 册:2006-5-4
得分:0 
VB中创建的DLL只是COM组件,无法作为输出函数的DLL,其实这只是个错误的说法。其实MS非常狡猾,如果你是个VB疯狂发烧友的话,应该早就狂试出这种可以创建输出函数的DLL的方法。
VB 编译文件实际上采取了两次编译的方法,首先是调用C2.exe产生*.OBJ文件,然后调用Link.EXE连接。如果在LINK的时候添加EXPORT 选项,实际上是可以输出函数的。但是,在VB的工程选项中将这些屏蔽了。而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法手动通过 Link来创建我们需要的DLL了。不过我找到一个比较龌鹾的变通的方法,就是先创建一个Exe工程,在Form_Load事件里面写下面的语句:
Sub Main
If MsgBox("哈哈", vbOKCancel) = vbOK Then
Shell "link2.exe " & Command$
End If
End Sub

然后编译为LinkTemp.EXE,接下来将LINK.EXE改名为Link2.exe,将LinkTemp.EXE改名为Link.EXE。这样在VB调用Link.EXE时会弹出对话框,处理就会中断。这时就可以有机会将OBJ文件拷贝出来了。
然后我创建了一个ActiveX DLL工程,在这个工程里面添加一个Module并创建一个Public函数mathadd:

Public Function mathadd(ByVal a As Long, ByVal b As Long) As Long
mathadd = a + b
End Function

编译这个工程,在Link的时候就会中断。然后把创建的Class1.obj、Module1.obj、Project1.obj备份出来。
然后就可以调用Link2.exe连接OBJ到DLL了,我的连接代码是:
Link2.exe "e:\vbdll\Class1.obj" "e:\vbdll\Module1.obj" "e:\vbdll\Project1.obj" "E:\Program Files\Microsoft Visual Studio\VB98\VBAEXE6.LIB" /ENTRY:__vbaS /EXPORT:mathadd /OUT:"e:\vbdll\ProjectOK.dll" /BASE:0x11000000 /SUBSYSTEM:WINDOWS,4.0 /VERS

注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。这样就大功告成了,可以被其他语言引入,例如在VB中,只需要:

Private Declare Function mathadd Lib "e:\vbdll\ProjectOK.dll" (ByVal a As Long, ByVal b As Long) As Long

[GLOW=255,DeepPink,3]我的免费网盘[/GLOW]
2006-12-26 09:27
wyfandy
Rank: 1
来 自:深圳
等 级:新手上路
帖 子:376
专家分:0
注 册:2006-12-11
得分:0 
不错支持

不论什么事,只要认准了一个目标,然后朝之不懈地努力,就一定实现。编程爱好者QQ群:21318556
2006-12-26 09:32
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
得分:0 
这个只要做成ActiveX Dll就行了...
做好之后..再添加引用它..就可以.之后跟使用类一样..

我的msn: myfend@
2006-12-26 09:44
学习VB才2天
Rank: 5Rank: 5
等 级:贵宾
威 望:16
帖 子:1653
专家分:0
注 册:2006-5-4
得分:0 
調用API習慣叻````難免齣錯```

[GLOW=255,DeepPink,3]我的免费网盘[/GLOW]
2006-12-26 09:45
zsolong
Rank: 1
等 级:新手上路
威 望:1
帖 子:193
专家分:0
注 册:2006-12-15
得分:0 
以下是引用purana在2006-12-26 9:18:37的发言:
写成ActiveX Dll就行了...
新建一下工程..然后选择ActiveX Dll就可以.

同意上面所说的,这样最简单了,最后只要在工程里面Make *** Dll就可以了,要用的时候只要应用过来就可以了!


2006-12-27 09:56
zsolong
Rank: 1
等 级:新手上路
威 望:1
帖 子:193
专家分:0
注 册:2006-12-15
得分:0 
我们的目标是:用最简单的方法解决最难的问题,方法能简单就一定要简单,解决问题才是王道!

2006-12-27 09:57
wycl8
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-12-20
得分:0 

感谢版主的帮助,


2007-01-07 05:56
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
得分:0 
不谢..

我的msn: myfend@
2007-01-07 09:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-112119-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.290631 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved