vbs如何调用dll
VisualStudio网站怎么引用dll文件?vs2015引用dll文件的教程
VisualStudio⽹站怎么引⽤dll⽂件?vs2015引⽤dll⽂件的
教程
Visual Studio创建的动态⽹站需要引⽤⼀些dll⽂件,该怎么引⽤呢?下⾯我们就来看看详细的教程。
Visual Studio 2015 旗舰版官⽅最新版
类型:编程⼯具
⼤⼩:1.69MB
语⾔:简体中⽂
时间:2014-11-17
查看详情
1、单击开始---->所有程序---->Visual Studio 2015,选择Visual Studio 2015打开软件。
2、单击⽂件---->打开---->⽹站,选择要打开的⽹站。
3、打开⽹站窗⼝中,找到要打开的⽹站,本例为TwoFish。
4、在当前项⽬上右击,选择添加---->引⽤,如下图所⽰。
5、引⽤管理器窗⼝中,选择浏览选项。
6、选择要引⽤的⽂件夹窗⼝中,选择要引⽤的dll⽂件,单击添加。
7、回到引⽤管理器窗⼝后,选中添加的dll⽂件,单击确定。
8、Visual Studio的解决⽅案资源管理器窗⼝中,我们需要的dll⽂件成功引⽤到项⽬中了。
以上就是vs2015引⽤dll⽂件的教程,希望⼤家喜欢,请继续关注。
在vb中生成dll文件并且调用的方法.
在vb中生成dll文件并且调用的方法.一、DLL制作1.打开新建工程2.选择“Active DLL”,单击“打开”按钮。
3.单击打开按钮后,系统在工程中添加一类模块。
4.为方便对DLL的引用可以改一下名称,如将类模块的名称改为Fraction。
5.在本类模块中添加代码如下。
Option ExplicitPublic NumPublic DenPublic Sub Add(NUm2, Den2)Num = NUm2 + Den2End SubPublic Sub Sbt(NUm2, Den2)Num = NUm2 - Den2End SubPublic Sub Mul(NUm2, Den2)Num = NUm2 * Den2End SubPublic Sub Div(NUm2, Den2)Num = NUm2 / Den2End Sub6.为与其他工程相区别,可将本工程命名为“Math”。
7.生成DLL文件。
二、DLL引用1.建立一个普通窗体。
2.添加引用。
3.在程序中添加以下代码。
Option ExplicitPublic Frac As New Fraction Private Sub Command1_Click() Frac.Add Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command2_Click() Frac.Sbt Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command3_Click() Frac.Mul Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command4_Click() Frac.Div Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command5_Click()Text1 = ""Text2 = ""Text3 = ""End Sub 4.运行程序。
vbs中调用另外vbs文件中变量的方法
vbs中调用另外vbs文件中变量的方法以vbs中调用另外vbs文件中变量的方法在vbs编程中,我们经常需要在一个vbs文件中调用另外一个vbs 文件中的变量。
这种情况通常发生在我们需要将一些数据或状态传递给另外一个vbs文件进行处理的时候。
本文将介绍一种常用的方法来实现这个目标。
在vbs中,我们可以使用ExecuteGlobal语句来调用另外一个vbs 文件中的变量。
ExecuteGlobal语句会执行指定的vbs代码,并将其中的变量导入到当前的作用域中。
下面是一个示例:```' 调用另外一个vbs文件中的变量ExecuteGlobal "D:\path\to\another.vbs"```在上面的示例中,我们使用ExecuteGlobal语句来执行了一个名为another.vbs的文件,并将其中的变量导入到当前的作用域中。
这样,我们就可以在当前的vbs文件中使用another.vbs中定义的变量了。
需要注意的是,被调用的vbs文件中的变量必须在被调用之前被定义。
否则,ExecuteGlobal语句将会出错。
因此,在使用ExecuteGlobal语句之前,我们需要确保被调用的vbs文件中的变量已经被正确地定义和初始化。
除了使用ExecuteGlobal语句,我们还可以使用其他方法来实现在vbs中调用另外一个vbs文件中的变量。
例如,我们可以使用FileSystemObject对象来读取被调用的vbs文件,并解析其中的变量。
下面是一个示例:```' 使用FileSystemObject对象读取vbs文件中的变量Set fso = CreateObject("Scripting.FileSystemObject")Set file = fso.OpenTextFile("D:\path\to\another.vbs") contents = file.ReadAllfile.Close' 解析vbs文件中的变量Set regex = New RegExpregex.Pattern = "Dim\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.+)" regex.Global = TrueSet matches = regex.Execute(contents)For Each match In matchesvarName = match.SubMatches(0)varValue = match.SubMatches(1)' 在当前的作用域中定义变量ExecuteGlobal "Dim " & varName & ": " & varName & " = " & varValueNext```在上面的示例中,我们使用FileSystemObject对象来读取了一个名为another.vbs的文件,并将其内容保存到一个字符串变量中。
用VB调用VC编写的DLL
这些函数名要用做 VB 中声明时的别名。
如果声明时不带别名会出现“Dll 调用约定错误”。
VB 中编写如下代码运行即可:
Option Explicit
Private
Declare
Function
FuncInDll
Lib
"E:\Computer
Science\dll\liudll\dll_withLibAndH.dll" Alias "_FuncInDll@12" (ByVal a As Long,
如何用 VB 调用 VC 编写的 DLL
——DLL 内函数调用采用别名 首先用 C++编写: dll_withlibAndH.h 如下: extern "C" __declspec(dllexport) int __stdcall FuncInDll (int a);
dll_withlibAndH.cpp 如下: #include <objbase.h> #include <iostream.h> #include "dll_withLibAndH.h"//看到没有,这就是我们增加的头文件
创建一个.bat 文件并输入:
Cl/c dll_withLibAndH.cpp
Link/dll dll_withLibAndH.obj 之后运行此批处理文件即生成 dll_withLibAndபைடு நூலகம்.dll 文件。用 Dll 函数查看器(Viewdll
程序)查看此 dll 文件内的函数,此处为_FuncInDll@12(12 为此函数的参数字节数),
ByVal b As Long, ByVal c As Long) As Long
在vb中调用dll的方法
在vb中调用dll的方法1 制作好DLL之后,就可以用VB调用它,实现VB调用C程序。
VB程序要使用DLL中的函数,首先必须要有特殊的声明,用Declare 声明语句在窗体级或模块级或全局模块的代码声明段进行声明,将动态链接库中的函数声明到VB中,供VB程序调用。
语句格式为:Declare Sub 过程名Lib [ Alias " 别名]([ByVal 参数AS类型]),或为Declare Function函数名Lib [Alias " 别名]([ByVal 参数AS类型])AS类型在声明中首先用Declare 关键字表示声明DLL中的函数。
在C语言中有的函数类型为VOID,它表示不具有返回值,则必须用关键字Sub将其声明成过程。
有的函数具有返回值,则必须用关键字Function将其声明成函数,并且在声明语句的最后要用AS关键字指明函数返回值的类型。
例如上面的ADD.DLL在VB中就可以声明为:Decl are Function ADD Lib “c:\ADD.d ll” (ByVal X AS Integer, ByVal Y AS Integer ,ByVal filein asstring)AS Integer通过此声明语句将函数ADD声明到VB中,便可直接调用。
2、dll文件中的函数好像是C语言写的,// 函数名:int __stdcall GetMacNo(int *MacNo)// 功能:获取卡机的卡机号(单机时)// 参数: MacNo[0]-被读出的卡机号// 返回值:0-成功,// 2-PC接收超时,// 3-应答错误dll的文件名是COMM232.dll函数的形参int *MacNo是指针吗?在VB中应该怎么声明和调用该函数?VB里也可以定义指针吗?问题补充:vb调用dll文件中的函数我是会的,但这儿的形参有一个星号才不知是怎么一回事,我是这样声明的对吗?Public Declare Function GetMacNo Lib "COMM232.dll" (ByVal MacNo As Integer) As Integer又应该怎么调用呢?要先定义一个指针的变量再传给*MacNo还是要怎么做?都说了MacNo是被读出的卡机号,那么就是传址的了。
【VB技巧】VB静态调用与动态调用dll详解
【VB技巧】VB静态调⽤与动态调⽤dll详解摘⾃:【【请注意】】:在以下语法格式中,请注意 [函数名] 的【⼤⼩写】静态与动态⽐较:静态调⽤简单,动态调⽤⿇烦;静态调⽤占⽤资源多,动态调⽤占⽤资源少;正所谓鱼和熊掌不可兼得。
静态调⽤定义:就是常⽤的申明API,⼀个DLL库⾥有很多的函数可供调⽤,把要⽤的申明即可。
⽐如:Public/Private Declare Function [函数名] Lib "DLL⽂件名" [Alias "别名"] (参数变量表) [As 返回值的数据类型]⽰例:Private Declare Function Test Lib "dll.dll" (x As String) As String当程序结束的时候系统回⾃动释放DLL调⽤。
动态调⽤定义:使⽤LoadLibery(DLL名),系统会检查DLL是否调⼊内存。
如果调⼊了,可直接调⽤DLL⾥的所有函数,没有就会把DLL加⼊⽬标进程的进程空间。
通过函数GetProcAddress确定函数⼊⼝地址,然后调⽤,后⼀种⽅法VB⾥不常⽤的。
静态调⽤详解:制作好DLL之后,⾸先⽤Declare声明语句在窗体级或模块级或全局模块的代码声明段进⾏声明,将动态链接库中的函数声明到VB中,供VB程序调⽤。
语法格式1:Public/Private Declare Sub [函数名] Lib "DLL⽂件名" [Alias "别名"] (参数变量表)语法格式2:Public/Private Declare Function [函数名] Lib "DLL⽂件名" [Alias "别名"] (参数变量表) [As 返回值的数据类型]在声明中⾸先⽤Declare关键字表⽰声明DLL中的函数。
在C语⾔中有的函数类型为VOID,它表⽰不具有返回值,则必须⽤关键字Sub将其声明成过程。
vbs脚本引用插件命令
按键的优势在于简单易上手,尤其有强大的插件命令,但是对于8.0以前的版本,某些命令(比如自定义函数)需要写入VBS块中才能使用,而此时无法使用自己熟悉的插件命令就有点纠结了。
虽然有的功能VBS自带的语言也能够做到,但是需要有一定的VBS编程基础,而且既然有了插件,我们追求的就是最简化的脚本了,所以在这里主要是为了告诉不熟悉VBS的朋友如何在VBS块中调用自己熟悉的插件命令。
其实调用方法很简单,已经知道的朋友直接关闭本窗口就OK了。
最好手上能准备一款查看DLL的软件(目前我使用的是OleView),没有也没关系,对于官方自带的插件我将会在下面直接说明。
先上个例子,调用自带的SYS系统插件获取剪贴板内容:1.VBSBegin2. dim Sys3. Set Sys=CreateObject("QMPlugin.Sys")4. msgbox Sys.GetCLB()5.VBSEnd复制代码可以看出,关键点只是在下面这一行Set Sys=CreateObject("QMPlugin.Sys")Set 语句的用法这里不多做解释,有兴趣的朋友可以自己百度一下或者直接通过按键自带的命令提示查看(标准VBS命令--语句--Set语句)这里,大家只需要了解的是,调用按键PLUGIN目录内的插件,使用上面的Set语句,将其中CreateObject的参数进行对应的修改即可,QMPlugin修改为对应插件的工程名,Sys修改为对应插件命令的所在的类名。
这些信息可由DLL查看软件获取。
对于按键官方自带的插件,工程名统一为QMPlugin,类名则为插件名。
、再来个例子,调用FILE插件写配置文件:首先,使用OleView查看FILE插件获取到插件信息后即可使用下面的脚本向C:\Config.ini写入配置文件了1.VBSBegin2. dim x3. Set x=CreateObject("QMPlugin.File")4. x.WriteINI "Command", "Val", "内容", "C:\Config.ini"5.VBSEnd复制代码。
VBA调用DLL动态链接库
VBA调用DLL动态链接库1.打开VBA编辑器,点'工具'菜单下的'引用'命令,在引用对话框中引用该动态链接库。
调用代码如下:Dim VBACls As New VBAPrj.VBAClsVBACls.Test(ThisDocument)2.如果知道该动态链接库文件的位置,可以在ThisDocument代码窗口以代码形式引用, 代码如下:Private Sub Document_Open()On Error Resume NextMe.VBProject.References.AddFromFile 'D:\VBAPrj.dll'End Sub3.将动态链接库文件拷贝到文档同一目录下,可在ThisDocument代码窗口中建立如下引用函数:Private Function GetProjectDoc() As ObjectOn Error Resume NextDim VBACls As ObjectSet VBACls = CreateObject('VBAPrj.VBACls')If VBACls Is Nothing ThenMsgBox 'VBAPrj.dll必须和文档在同一目录下!'Exit FunctionEnd IfSet GetProjectDoc = VBAClsEnd Function然后以以下代码形式调用Test:Dim objPrjDoc As ObjectSet objPrjDoc = GetProjectDocCall objPrjDoc.T est(ThisDocument)Set objPrjDoc = Nothing使用第一种方法调试提示找不到类库,第二种方法我没试过,用了第三种方法调试成功。
我也觉得第三种还是蛮好的,除了多几行代码。
成功调用DLL后原来很多在VB下写的东东简单改一下就可以在VBA下用了,效率又高,保密性又好。
VB调用DLL文件
VB调用DLL文件
VB默认的传递方式就是传指针(ByRef,也就是把变量的地址传递给所调用的函数)。
如果要传值(也就是把变量的值传递给所调用的函数)反要在参数声明前加ByVal。
1.如果你传递的参数是普通的数据类型,在参数前什么都不要加就行了。
如C语言声明为:
void __stdcall MyProc(short * nPara);
则VB声明为:
Declare Function MyProc Lib "MyDll.dll" (nPara As Integer) 调用时同普通函数。
2.如果C语言中的指针是字符串指针,那么在VB声明时需要加上ByVal,这是个例外。
如C语言声明为:
void __stdcall MyProc(char * sPara);
则VB声明为:
Declare Function MyProc Lib "MyDll.dll" (ByVal sPara As String)
调用时同普通函数。
3.如果C语言的指针是数组指针,则在VB中调用时应将数组的首元素传递给DLL。
如C语言声明为:
void __stdcall MyProc(int [] arrPara);
则VB声明为:
Declare Function MyProc Lib "MyDll.dll" (nPara As String)
调用时为MyProc A(0)。
注意:不能直接传递数组名,因为如果传递数组名,VB实际会传一个复杂的结构类型给DLL,这对编写C语言的DLL来说,处理这样的结构比较麻烦,所以通常都不支持这种方式。
VB调用系统DLL方法
用SYSTEM EXEC.VI可以实现的经典应用命令·命令列: rundll32.exe shell32.dll,Control_RunDLL功能: 显示控制面板·命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1 功能: 显示“控制面板-辅助选项-键盘”选项视窗·命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2 功能: 显示“控制面板-辅助选项-声音”选项视窗·命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3 功能: 显示“控制面板-辅助选项-显示”选项视窗·命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4 功能: 显示“控制面板-辅助选项-滑鼠”选项视窗·命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5 功能: 显示“控制面板-辅助选项-传统”选项视窗·命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1功能: 执行“控制面板-添加新硬体”向导。
·命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter 功能: 执行“控制面板-添加新印表机”向导。
·命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1 功能: 显示“控制面板-添加/删除程式-安装/卸载” 面板。
·命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2 功能: 显示“控制面板-添加/删除程式-安装Windows” 面板。
【转】vb调用dll函数声明方法
【转】vb调用dll函数声明方法用vc写的DLL的有__stdcall才可以被其他的调用,所以。
vb调用16 位DLL 调用方法与32 位DLL 调用方法类同。
语法:[Public | Private] Declare Fun Function name Lib "li bname" [Alias "aliasname"]ction [([arglist])] [As type]Declare 语句的语法包含下面部分:Public 可选的。
用于声明对所有模块中的所有其它过程都可以使用的函数。
Private 可选的。
用于声明只能在包含该声明的模块中使用的函数。
name 必需的。
任何合法的函数名。
动态链接库的入口处(entry points)区分大小写。
libname 必需的。
包含所声明的函数动态链接库名或代码资源名。
Alias 可选的。
表示将被调用的函数在动态链接库(DLL) 中还有另外的名称。
当外部函数名与某个函数重名时,就可以使用这个参数。
当动态链接库的函数与同一范围内的公用变量、常数或任何其它过程的名称相同时,也可以使用Alias。
如果该动态链接库函数中的某个字符不符合动态链接库的命名约定时,也可以使用Alias。
aliasname 可选的。
动态链接库。
如果首字符不是数字符号(#),则aliasname 是动态链接库中该函数的入口处的名称。
如果首字符是(#),则随后的字符必须指定该函数的入口处的顺序号。
arglist 可选的。
代表调用该函数时需要传递的参数的变量表。
type可选的。
Function 返回值的数据类型;可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal (目前尚不支持)、Date、String(只支持变长)或Variant,用户定义类型,或对象类型。
arglist 参数的语法以及语法各个部分如下:[Optional] [ByVal | ByRe ByRef] [ParamArray] varnam e[( )] [As type] 部分描述:Optional可选的。
如何用VB编写自己的DLL文件,并调用其中的函数
如何用VB编写自己的DLL文件,并调用其中的函数一、VB编写自己的DLL文件1.新建一个VB工程,工程类型为ActiveX DLL类型。
2.设定工程的名字和类模块的名字。
这里我使用的工程的名字是DLLTest,类模块的名字是Class1。
3.在类模块中写入要封装的函数这里我写了一个计算长方体的体积的函数,代码如下:1.Function calVolume(ByVal a As Double, ByVal b As Double, ByVal c As Double) As Double2.calVolume = a * b * c3.End Function4.保存工程,并生成Dll文件。
通过选择”文件“->”生成DllT est.dll“,生成Dll文件。
至此,完成Dll文件的制作。
二、如何调用自己制作的Dll文件中的函数1.新建一个VB工程,工程类型为标准EXE类型。
2.注册制作的Dll文件。
注册命令格式为:regsvr32 dll文件的绝对地址名称举例说明:比如我把上面我生成的DllTest.dll放在了E盘的VbTest文件里面了,那么我的注册命令为:regsvr32 E:\VbTest\DllTest.dll。
如果注册成功,系统会有弹窗提示。
(测试发现,注册dll文件时,路径文件夹的名字不能有空格)3.在工程中添加相关引用。
”工程“->”引用“->”DllTest“,在DllTest前面打上对勾,即可。
4.编写调用Dll文件的相关代码。
这里我在主窗体中添加了一个按钮,在按钮里面写入了如下代码:Private Sub Command1_Click()Dim MyObj As DllT est.Class1 Set MyObj = New Class1Dim aa As DoubleDim bb As DoubleDi m cc As DoubleDim tempVolume As Doubleaa = 1.1bb = 2.2cc = 3.3tempVolume = MyObj.calVolume(aa, bb, cc)MsgBox temp VolumeEnd Sub另外,我添加了一个模块,在模块中写入了如下代码:Public Declare Function calVolume Lib 'DllTest.dll' (ByVal a As Double, ByVal b As Double, ByVal c As Double) As Double5.至此结束。
vb动态加载dll的一个类,实现vb动态加载dll并动态调用dll导出的函数的一个方便办法
vb动态加载dll的一个类,实现vb动态加载dll并动态调用dll导出的函数的一个方便办法自从会vb用调用动态库函数以来,我一直在想:如何动态的调用dll 里的函数?网上有一个用CallWindowProc函数的方法,不过我还是喜欢自己有个办法.今天工夫不负有心人,我终于把我心中一直想的办法给实现了,干脆就往自己的空间上贴吧.错误的地方,希望可以得到有这方面的师傅给以指正,以求进步!对于系统api我没有尝试,如果调用约定相符,应该适用于对系统api的调用.我自己用c写个dll,然后在vb里写了这个类.以下代码只是我简单的实现,主要的是看实现的道理.vc代码:///'我把dll文件名命名为:dll#include <Windows.h>#include <stdlib.h>#include <string.h>#include 'stdafx.h'BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){return TRUE;}extern 'C' BOOL _declspec(dllexport) add(int a){MessageBoxA(NULL,'运行在dll里!','成功',MB_OK);return 1;}///vb代码:'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''类代码:Private 状态标志 As BooleanPrivate 模块句柄 As LongPrivate 本地函数地址备份(0 To 4) As BytePrivate 被替换函数的地址 As LongPublic Function 替换函数地址(模块名As String, 函数名As String, 本地函数地址 As Long) As BooleanIf 0 = 本地函数地址 Then替换函数地址 = 0Exit FunctionEnd If被替换函数的地址 = 替换函数地址Dim 函数地址 As LongDim a As LongDim 跳转指令(0 To 4) As Byte'加载模块模块句柄 = LoadLibrary(模块名)If 0 <> 模块句柄 Then'状态标志 = 1Else:替换函数地址 = 0Exit Function'检索函数地址函数地址 = GetProcAddress(ByVal 模块句柄, ByVal 函数名)If 0 <> 函数地址 Then'状态标志 = 1Else替换函数地址 = 0Exit FunctionEnd If'计算跳转地址a = 函数地址 - (本地函数地址 + 5)'构造跳转地址跳转指令(0) = 233a = WriteProcessMemory(-1, ByVal VarPtr(跳转指令(1)), ByVal VarPtr(a), 4, 0)If 0 = a Then替换函数地址 = 0Exit FunctionEnd If'先备份本地函数入口指令a = WriteProcessMemory(-1, ByVal VarPtr(本地函数地址备份(0)), ByVal 本地函数地址, 5, 0)If 0 = a Then替换函数地址 = 0Exit FunctionEnd If'写入跳转指令a = WriteProcessMemory(-1, ByVal 本地函数地址, ByVal VarPtr(跳转指令(0)), 5, 0)If 0 = a Then替换函数地址 = 0Exit FunctionElse:状态标志 = 1替换函数地址 = 1End IfEnd FunctionPublic Function 还原函数地址() As BooleanIf 0 = 状态标志 Then还原函数地址 = 0Exit FunctionEnd IfDim a As Longa = WriteProcessMemory(-1, ByVal 被替换函数的地址, ByVal VarPtr(本地函数地址备份(0)), 5, 0)If 0 = a Then还原函数地址 = 0Exit FunctionElse:状态标志 = 0还原函数地址 = 1End IfFreeLibrary 模块句柄End FunctionPublic Function 当前状态() As Boolean当前状态 = 状态标志End Function''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''vb普通模块代码:'读写内存的api函数Public Declare Function WriteProcessMemory Lib 'kernel32' (ByVal hProcess As Long, ByVal _lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long'加载模块的api函数Public Declare Function LoadLibrary Lib 'kernel32' Alias 'LoadLibraryA' (ByVal lpLibFileName As String) As Long '检索模块里函数地址的api函数Public Declare Function GetProcAddress Lib 'kernel32' (ByVal hModule As Long, ByVal lpProcName As String) As Long 'Public Declare Function FreeLibrary Lib 'kernel32' (ByVal hLibModule As Long) As Long'模拟一个函数与dll里,我们想调用函数类型和参数一致, 用类将函数的地址替换Public Function 测试函数(参数 As Long) As Boolean'我们随便给返回0,因为这个指令将不会被程序执行到测试函数 = 0End Function''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''vb窗口模块代码:Private Sub Form_Load()Dim 模块名 As String, 函数名 As String模块名 = App.Path + '/dll.dll''模块名现在可以自己定了,自由了!函数名 = 'add'Dim p As BooleanDim aa As New Class1p = aa.替换函数地址(模块名, 函数名, AddressOf 测试函数) If p Then测试函数 0'将会弹出对话筐:运行在dll里!aa.还原函数地址End IfEnd Sub'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''。
分享如何在VB中调用VC编写的DLL
分享如何在VB中调⽤VC编写的DLL⼀般来说,VB和VC共同编程有3种⽅式:⼀种是VC⽣成DLL,在VB中调⽤DLL;⼀种是VC⽣成ActiveX控件(.ocx),在VB中插⼊;还有⼀种是在VC中⽣成ActiveX Automation服务器,在VB中调⽤。
相对⽽⾔,第⼀种⽅法对VC编程者的要求最低,但要求你的伙伴进⾏配合,我推荐这种⽅法。
先说说VC++的编程。
⾸先在VC++中⽣成Win32 DLL⼯程。
在这个⼯程中添加⼏个函数供VB⽤户调⽤。
⼀个DLL中的函数要想被VB调⽤,必须满⾜两个条件:⼀是调⽤⽅式为stdcall,另⼀个是必须是export的。
要做到第⼀条,只须在函数声明前加上__stdcall关键字。
如:short __stdcall sample(short nLen, short *buffer)要做到第⼆条,需要在*.def⽂件中加上如下的⼏⾏:EXPORTSsample @1这⾥的sample是你要在VB中调⽤的函数名,@1表⽰该函数在DLL中的编号,每个函数都不⼀样。
注意这⾥的函数名是区分⼤⼩写的。
⾄于你说的需要传递⼤量数据,可以这样做,在VB中⽤⼀个数组存放数据,然后将该数组的⼤⼩和地址传给VC(⾄于如何在VB中编程我会在下⾯介绍)。
就象上⾯的例⼦,nLen是数组⼤⼩,buffer是数组地址,有了这两条,你可以象使⽤VC的数组⼀样进⾏处理了。
⾄于输出图形,可以⽣成WMF或BMP格式,让VB调⽤。
不过,我认为也可以直接输出到视窗,只要VB将窗⼝的句柄hWnd和hDC以及视窗的绘图位置(VB和VC采⽤的坐标系必须⼀致才⾏)传给VC就⾏了。
⽽VB的AutoRedraw属性必须为False,在Paint事件中调⽤VC的绘图程序。
再谈谈VB的编程。
VB调⽤DLL的⽅法和调⽤Windows API的⽅法是⼀样的,⼀般在VB的书中有介绍。
对于上⾯⼀个例⼦,先要声明VC函数:Declare Function sample Lib "mydll.dll" (ByVal nLen As Integer, buffer As Integer) As Integer这⾥mydll.dll是你的dll的名字。
VBS调用VB编写的DLL
VBS调用VB编写的DLL
下面以提取字符串中的数字为例
打开VB6.0
新建一个ActiveX DLL
将工程名称修改为GETNUMBER,类名修改为take
进行封装的代码如下:
新建一个叫GETNU的函数:
Public Function getnu(STRIN As String) As String
Dim k
For k = 1 To Len(STRIN)
If Mid(STRIN, k, 1) Like "[0-9]" Then
getnu = getnu & Mid(STRIN, k, 1)
End If
Next k
MsgBox getnu
End Function
文件—--生成GETNUMBER.DLL
在CMD中用REGSVR32命令注册DLL。
注册前将目录转换到保存GETNUMBER.DLL的文件夹下。
成功后会提示:
打开一个记事本,在记事本中输入如下代码:
Dim strin,strout
strin=InputBox("输入窗口","提取数字")
Set strout=CreateObject("getnumber.take")
strout.getnu(strin)
保存为.VBS后缀的文件。
双击该VBS文件,在弹出的输入框中输入数字和字母、中文的混合字符串,点击确定按钮,就可以看到弹出的消息窗中显示的提取结果。
vbs如何调用dll
vbs如何调用dll
把 dll 注册后
dim obj
set obj = CreatObject("工程名.类名")
obj.函数()
dll的函数有两种接口,一种是com接口,可以直接调用,另一种不能。
com接口调用方法:
(比如C:\example.dll中的函数中的类模块名为calc的函数)
set ws=createobject("wscript.shell")
ws.run"regsvr32 /s C:\example.dll"
set ca=createobject("example.calc")
msgbox ca.add(12,34)
ws.run"regsvr32 /u /s C:\example.dll"
这只是个实例,许多dll的com接口用法需要看一下程序的说明。
但用vbs调用需要先用regsvr32注册一下才行。
首先先注册你的dll 右键点击注册组件
用这个语句
set kk=createobject("工程名.类名")
kk.函数名
追问:
如何注册DLL?
回答:
方法一:右键你的dll 选择注册组件
方法二:把你的dll放进C:\windows\system32 文件夹
然后开始-运行-输入 regsvr32 ***.dll 回车
追问:
我要用VBS直接注册DLL,如果用BAT来注册DLL,会弹出窗口。
回答:
regsvr32 /s ***.dll 加个参数/s 就不会提示。
VB6.0怎么调用带参数的DLL?
VB6.0怎么调用带参数的DLL?
vb6.0中可以创建DLL文件,也可以调用DLL文件,该怎么调用呢?下面我们就来看看详细的教程。
•软件名称:
•msdn for vb6.0(vb6 msdn) 精简中文版
•软件大小:
•20.6MB
•更新时间:
•2014-02-06立即下载
1、桌面上双击VB图标,打开Visual Basic。
2、打开的VB窗口中,选择文件---->新建工程选项。
3、新建工程窗口中,选择ActiveX DLL选项。
4、编辑窗口中,输入dll文件的代码,具体内容由个人决定。
5、单击文件---->保存工程,将dll工程保存。
6、单击文件---->生成dll,生成一个dll文件。
7、单击工程---->引用选项,如下图所示。
8、引用窗口中,单击浏览按钮。
9、选择要引用的DLL文件,单击打开按钮。
10、DLL文件就被引用到应用程序中了,单击确定按钮。
11、接下来就可以在应用程序中,插入组件,书写代码使用DLL
文件了。
以上就是VB6.0调用带参数的DLL的教程,希望大家喜欢,请继续关注脚本之家。
关于VBS的函数调用详解
关于VBS的函数调⽤详解
前段时间同事在写VBS代码的时候被VBS的函数调⽤搞的很莫名其妙,对于我了解到的VBS的函数调⽤问题这⾥写出我的⼀些见解。
对于⾼⼿可以略过,当我是关公⾯前耍⼤⼑吧。
先上代码:
上⾯的程序在调⽤函数的时候对于传参没有使⽤过括号括起来,原因是pr这个函数并没有返回值,VBS规定当被调⽤的函数没有返回值时不能使⽤括号修饰形参,当有返回值时则必须使⽤括号。
所以上⾯的程序如果写成pr(name,age)则程序会出错。
对于call这种调⽤形式,VBS⼜规定使⽤call调⽤函数⽆论是否带返回值,形参都要带括号。
如果不带则程序出错,如下:
以下是正确与错误的调⽤总结:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
dim obj
set obj = CreatObject("工程名.类名")
obj.函数()
dll的函数有两种接口,一种是com接口,可以直接调用,另一种不能。
com接口调用方法:
(比如C:\example.dll中的函数中的类模块名为calc的函数)
set ws=createobject("wscript.shell")
ws.run"regsvr32 /s C:\example.dll"
set ca=createobject("example.calc")
msgbox ca.add(12,34)
ws.run"regsvr32 /u /s C:\example.dll"
这只是个实例,许多dll的com接口用法需要看一下程序的说明。但用vbs调用需要先用regsvr32注册一下才行。
追问:
我要用VBS直接注册DLL,如果用BAT来注册DLL,会弹出窗口。。。
回答:
regsvr32 /s ***.dll 加个参数/s 就不会提示
首先 先注册你的dll 右键点击注册组4;工程名.类名")
kk.函数名
追问:
如何注册DLL?
回答:
方法一:右键你的dll 选择注册组件
方法二:把你的dll放进C:\windows\system32 文件夹
然后开始-运行-输入 regsvr32 ***.dll 回车