如何让VB调用外部的DLL?

如何让VB调用外部的DLL?,第1张

声明一个DLL过程,首先需要在代码窗口的"通用(General)"部分增加一个Declare语句。如果该过程返回一个值,应将其声明为\x0d\x0aFunction:\x0d\x0aDeclareFunctionpublicnameLib"libname"[Alias"alias"][([[ByVal]variable[Astype][,[ByVal]variable[Astype]]...])]AsType\x0d\x0a如果过程没有返回值,可将其声明为Sub:\x0d\x0aDeclareSubpublicnameLib"libname"[Alias"alias"][([[ByVal]variable[Astype][,[ByVal]variable[Astype]]...])]\x0d\x0a缺省情况下,在标准模块中声明的DLL过程,可以在应用程序的任何地方调用它。在其它类型的模块中定义的DLL过程则是模块私有的,必须在它们前面声明Private关键字,以示区分。下面分别介绍声明语句的各个组成部分。\x0d\x0a(一)、指定动态库:\x0d\x0aDeclare语句中的Lib子句用来告诉VisualBasic如何找到包含过程的.dll文件。如果引用的过程属于Windows核心库(User32、Kernel32或GDI32),则可以不包含文件扩展名,如:\x0d\x0aDeclareFunctionGetTickCountLib"kernel32"Alias"GetTickCount"()AsLong\x0d\x0a对于其它动态连接库,可以在Lib子句指定文件的路径:\x0d\x0aDeclareFunctionlzCopyLib"c:/windows/lzexpand.dll"_\x0d\x0a(ByValSAsInteger,ByValDAsInteger)AsLong\x0d\x0a如果未指定libname的路径,VisualBasic将按照下列顺序查找该文件:\x0d\x0a①.exe文件所在的目录\x0d\x0a②当前目录\x0d\x0a③Windows系统目录\x0d\x0a④Windows目录\x0d\x0a⑤Path环境变量中的目录\x0d\x0a下表中列出了常用的 *** 作系统环境库文件。\x0d\x0a动态链接库描述\x0d\x0aAdvapi32.dll高级API服务,支持大量的API(其中包括许多安全与注册方面的调用)\x0d\x0aComdlg32.dll通用对话框API库\x0d\x0aGdi32.dll图形设备接口API库\x0d\x0aKernel32.dllWindows32位核心的API支持\x0d\x0aLz32.dll32位压缩例程\x0d\x0aMpr.dll多接口路由器库\x0d\x0aNetapi32.dll32位网络API库\x0d\x0aShell32.dll32位ShellAPI库\x0d\x0aUser32.dll用户接口例程库\x0d\x0aVersion.dll版本库\x0d\x0aWinmm.dllWindows多媒体库\x0d\x0aWinspool.drv后台打印接口,包含后台打印API调用。\x0d\x0a对于Windows的系统API函数,可以利用VB提供的工具APIViewer查找某一函数及其相关数据结构和常数的声明,并复制到自己的程序中。

在新建项目的地方选择类库, 然后会有一个Class1.cs文件. 内容改为:

namespace ClassLibrary1

{

public class Class1

{

public string M()

{

return "String" //返回字符串"String"

}

}

}

然后生成该类库, 在.../bin/debug或.../bin/release下得到*.dll文件

然后新建一个控制台的程序, 选择菜单: 项目-添加引用...

在d出的选择卡选择:浏览, 添加刚才生成的*.dll

然后在控制台程序的Program.cs文件里写:

using System

using ClassLibrary1 //引用刚才引用了的DLL里的ClassLibrary1命名空间

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

Class1 C1 = new Class1() //实例化DLL里的Class1类

Console.WriteLine(C1.M())

Console.ReadLine()

}

}

}

一、创建dll文件:例如生成一个md5编码判断状态的文件,即,输入一个字符串(stringA)和一个32位md5编码(stringB),判断此字符串A对应的32位md5编码是否与B相等,如果相等返回true,否则返回false。打开VS2005,“文件”--》“新建”--“项目”,选择“Windows控件库”,命名后点击“确定”,在“UserControl1.cs”中输入以下代码:usingSystemusingSystem.Collections.GenericusingSystem.ComponentModelusingSystem.DrawingusingSystem.DatausingSystem.Windows.FormsusingSystem.TextusingSystem.Security.Cryptographynamespacemd5{publicpartialclassProgram:UserControl{#regionMD532位加密:GetMd5Str32//////32位MD5加密//////待加密字串///加密后的字串publicstaticstringGetMd5Str32(stringstrSource){byte[]bytes=Encoding.ASCII.GetBytes(strSource)byte[]hashValue=((System.Security.Cryptography.HashAlgorithm)System.Security.Cryptography.CryptoConfig.CreateFromName("MD5")).ComputeHash(bytes)StringBuildersb=newStringBuilder()for(inti=0i///核对md5编码是否一致/////////如果一致返回true,否则返回false///publicstaticboolCheckMd5String(stringstr1,stringstr2){stringmd5String=str1//需要验证的字符串stringmd5DbString=str2//需要核对的32位md5编码intresult=string.Compare(md5.Program.GetMd5Str32(str1),md5DbString,true)if(result==0){returntrue}else{returnfalse}}#endregion}}修改“UserControl1.Designer.cs”中的命名空间为“md5”,方法为“Program”,即可生成dll文件。在\bin\Debug文件假下,可以找到相应的dll文件。二、部署dll流程:首先把dll文件放到应用程序\bin\Debug\下;然后在解决方案中添加引用:右键鼠标-->添加引用-->浏览-->选择dll放置路径后点击“确定”。注意:要在应用文件头处使用usingmd5;命令。测试应用程序代码,如下:Form1.csusingSystemusingSystem.Collections.GenericusingSystem.ComponentModelusingSystem.DatausingSystem.DrawingusingSystem.TextusingSystem.Windows.Formsusingmd5namespaceWindowsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent()}privatevoidbutton1_Click(objectsender,EventArgse){stringstr1=textBox1.Text.ToString()stringmd5String=textBox2.Text.ToString()textBox3.Text=md5.Program.GetMd5Str32(str1)textBox4.Text=md5.Program.CheckMd5String(str1,md5String).ToString()}privatevoidbutton2_Click(objectsender,EventArgse){this.Close()}}}三、注意点:1、在C#应用程序开发过程中,加载dll文件时,报错“未能加载文件或程序集“md5,Version=2.0.0.0,Culture=neutral,PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。”,请指点一下是什么原因?解决:这是因为加载dll的路径问题,正确加载方式为:在“解决方案”的“引用”文件上右击鼠标,选择“添加引用”---》在“浏览”选项卡中添加引用(注意:自己定义的dll文件不能在“.NET”选项卡中添加。)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8107245.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存