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 /VERSION:1.0 /Dll /INCREMENTAL:NO /OPT:REF /MERGE:.rdata=.text /IGNORE:4078
注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。这样就大功告成了,可以被其他语言引入,例如在VB中,只需要:
Private Declare Function mathadd Lib "e:\vbdll\ProjectOK.dll" (ByVal a As Long, ByVal b As Long) As Long
转自bbs.sendsms.cn
分享到:
相关推荐
VBIDE.DLL是Visual Basic Integrated Development Environment的动态链接库,它是微软Office套件和其他应用程序中的一个重要组成部分,允许用户通过VBA来编写自定义脚本和宏。 【描述】:“windows x86系统 dot ...
在VB6.0环境下,连接MySQL数据库通常有多种方式,其中一种是通过使用动态链接库(DLL)的方式,比如libmySQL.dll。本教程将详细讲解如何不依赖ODBC(Open Database Connectivity)来实现VB与MySQL数据库的直接交互,...
虽然可以借助第三方工具如WinRAR来实现RAR文件的解压缩,但直接通过编程调用WinRAR的动态链接库(DLL)可以提供更稳定且可控的解决方案。本篇将详细讲解如何使用VB调用winrar.dll进行RAR文件的解压缩。 首先,你...
`refprop.dll`是RefProp库的动态链接库文件,用于在不同的编程环境中调用这些功能。 本文将深入探讨如何在C#和VB.NET(Visual Basic .NET)中调用`refprop.dll`,以获取和处理物性参数。 首先,你需要下载并安装...
终于找到了"指的是通过引入libMysql.dll动态链接库,使得VB6能够与MySQL 5.0及以上版本进行有效通信。libMysql.dll是MySQL官方提供的C API接口,它允许开发者在不依赖于MySQL服务器的特定版本的情况下,编写跨平台的...
DLL(动态链接库)是一个很有用的东西,比如说,你有一段经常要用到的代码,可以作为标准代码使用, 就可以把它封装成DLL文件,以后要用到的时候,只需要引用一下就可以了, 没有必要重复写这部分代码。 在开发大...
这时,可以借助于WinIO.dll这个动态链接库来实现。WinIO.dll是一个非侵入式的第三方库,允许开发者在VB6.0中直接与硬件交互,而无需深入操作系统底层。它提供了简单易用的API接口,使得程序员能够方便地读取和设置...
特别声明:此DLL仅限于VB爱者研究使用,使用者请注明出处(首发于VBGOOD 链接地址http://www.vbgood.com/thread-108165-1-1.html),不得用于商业用途,本人也不对使用此DLL产生的任何后果负责。 文件名:...
VB+ZIP.Dll压缩解压源码提供了一种方法,它不依赖于常见的第三方压缩工具如WinRAR或WinZip,而是利用特定的DLL动态链接库来实现这一功能。这使得程序更加独立,减少了对额外软件安装的依赖。 首先,我们需要了解DLL...
"VC++允许库合集"是指由微软提供的Visual C++ Redistributable Packages,这些包包含了运行许多C++编译器生成的应用程序所需的关键动态链接库(DLL)文件。当您遇到“未能加载文件或程序集CefSharp.Core.dll”这样的...
本文将详细解释如何使用VB6.0调用由C#编写的DLL动态链接库,以及在这一过程中涉及到的关键步骤和知识点。 首先,我们要了解VB6.0和C#之间的差异。VB6.0是基于COM(Component Object Model)技术的,而C#是.NET框架...
标题 "三菱 Interop.ACTMULTILib.dll" 指的是三菱公司开发的一个动态链接库(DLL)文件,它是三菱自动化软件交互的一部分。DLL 文件在Windows操作系统中被广泛使用,它们包含可由多个程序同时调用的函数和资源,以...
描述中提到的"杨宇老师写的waspcn.dll,64位的,用于计算"揭示了这个.dll文件是杨宇开发的一个计算相关的动态链接库(DLL),并且是专为64位操作系统设计的。 动态链接库(DLL)是Windows操作系统中的一种共享库机制...
本示例探讨的是如何使用VB调用WinIo.dll这个动态链接库,以实现模拟按键的功能。WinIo.dll是一个特殊的系统级接口库,允许程序员直接与硬件交互,包括控制端口输入输出,这对于模拟键盘输入等任务非常有用。 首先,...
CSGL.dll 和 CSGL.Native.dll 是两个与计算机图形学和编程相关的动态链接库(Dynamic Link Library)文件。这些文件通常在开发或运行使用CSGL(Computer Science Graphics Library)库的应用程序时是必要的。CSGL...
Bass.dll的SDK(Software Development Kit)包含了详细的技术文档、示例代码和必要的头文件及动态链接库。这些资源对于开发者来说是至关重要的,因为它们可以帮助理解函数库的工作原理,以及如何在不同的编程语言中...
QMDispatch.dll是按键精灵提供的一种动态链接库,用于在VB中实现对按键精灵API的调用。 屏幕找图是自动化脚本中的一个关键部分,它允许程序在屏幕上查找特定的图像或图案,并返回匹配的结果。这对于游戏辅助、自动...
标题“jmail.dll 下载”与描述“jmail.dll vs2005,2008发送邮件”涉及的核心知识点是使用jmail.dll这个动态链接库(DLL)在ASP.NET 2008环境下发送电子邮件。DLL文件是Windows操作系统中用于封装一组相关功能的共享...