欢迎光临:
  
  非常感谢您光临枕善居。本站是一个免费的基于VB,VB.NET源代码交流的平台,为大家提供优质的专业的源代码,如果您有需要,本站可以帮助在业余时间里给您寻找代码。当然,如果您有好的代码也可以在本站发布,共享给大家。
专业VB和.NET源码、编程开发教程、图标资源、USB电脑遥控器、智能家电控制开关....更多东东请进入我的淘宝小店--->
VB及.NET新源码2011(3DVD,控件+资源) 智能多路控制(串口编程开关) 带源码!


05-07
15

VB中创建可以输出函数的DLL

VB中创建可以输出函数的DLL

VB中创建的DLL只是COM组件,无法作为输出函数的DLL。今天从袁波哪里搞到一种可以创建输出函数的DLL的方法。


VB编译文件实际上采取了两次编译的方法,首先是调用c2.exe产生OBJ文件,然后调用Link.exe连接。如果在link的时候添加EXPORT选项,实际上是可以输出函数的。但是,在VB的工程选项中将这些屏蔽了。而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法通过Link来输出函数了。不过我找到一个比较龌鹾的变通的方法,就是先创建一个Exe工程,在Form_Load事件里面写下面的语句:

Private Sub Form_Load()
    If (MsgBox("hehe", vbOKCancel) = vbOK) Then
        Shell "link2.exe " & Command$
    End If
    End
End Sub

然后编译为linktemp.exe,接下来将LINK.EXE改名为Link2.exe,将linktemp.exe改名为link.exe。这样在VB调用link.exe时会弹出对话框,处理就会中断。这时就可以有机会将OBJ文件拷贝出来了 J

然后我创建了一个ActiveX DLL工程,在这个工程里面添加一个Module并创建一个Public函数mathadd:

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

Builder这个工程,在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。这样就大功告成了 :-D,可以被其他语言引入,例如在VB中,只需要:

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

就可以了。


相关日志:
文章来自: 摘自csdn
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 10 | 引用: 0 | 查看次数: 7108

回复回复ddlong [2009-10-17 00:01:15 |  | del]
dddddddddddddddddddddddddddddd
回复回复wuang [2007-12-03 23:55:00 |  | del]
用不着
可以写个插件支持
自动扫描工程文件
自动输出
多个函数也可以
回复回复yyywill [2007-02-01 14:46:01 |  | del]
怎么没有下载地址??
回复回复smzy [2005-08-27 13:39:21 |  | del]
不是太好用,虽然的确是可以输出函数,但是有些功能无法实现,DLLMAIN函数就不行。[9]
回复回复carry [2005-08-12 16:47:39 |  | del]
podvcd  给我一份好吗?xucarry@hotmail.com
回复回复sunbwj [2005-08-01 10:19:02 |  | del]
回复回复vbangle [2005-07-23 06:58:29 |  | del]
http://club.5ivb.net/
上有多种解决方案
回复回复vbangle [2005-07-23 06:55:22 |  | del]
/EXPORT:mathadd /OUT
EXPORT开关声明了输出函数mathadd
如果有很多输出函数,那还全部写上?
回复回复lingll [2005-07-21 05:13:34 |  | del]
vbadvance可以做到
回复回复podvcd [2005-07-20 21:54:33 |  | del]
有专门的插件支持这个功能的。可以编译标准32位动态连接库。要的问我要好了   podvcd@126.com
发表评论
您没有权限发表评论!