Visual C#制做DLL

作为软件设计和开发人员大都有过使用DLL(动态连接库)的经历,DLL的产生使得我们的应用程序在可维护性、代码的重复使用等方面都有了很大的提高。以前用的DLL一般都是用Visual C++、Delphi或者VB等编程语言来编写的,这种DLL的编写和使用,我们大都已经比较习惯了。作为新一代的程序开发语言--Visual C#,到底是如何编写和使用DLL的呢!本文就试着就这方面的问题来进行简单的介绍。
  Visual C++、Delphi或者VB等编程语言来编写成的DLL文件,在编译完成过以后,产生DLL文件已经是一个可以直接供计算机使用的二进制文件。但用Visual C#编译器生成的受管代码(managed code)虽然也是二进制文件,但不是可以直接供计算机使用的原始代码(机器语言代码)。他实质上是一种中间语言(IL)代码,这种IL代码要转变成可以供计算机直接使用的原始代码,就需要经过"下一代窗口服务"( Next Generation Windows Services,简写为NGWS ) runtime的即时编译器(即JIT)进行编译。
  经过以上比较,我们可以看出,用Visual C#生成的DLL文件已经和以前的DLL文件有了本质上的区别。用Visual C#生成的DLL文件在程序设计中更多的表现为一种类(Class)或者类库(Class Library)。本文就试着通过一个具体程序的例子,按照下面步骤来具体介绍:
  (1).创建一个DLL源代码。
  (2).编译此DLL源代码,生成DLL文件。
  (3).用此DLL来创建一个简单的客户端程序。
  一. 程序设计开发及运行环境:
  (1).微软视窗2000专业版
  (2)..Net FrameWork SDK Beta 2
  二. 创建一个DLL源代码(dll.cs)
  由于用Visual C#创建的DLL,此DLL是不需要执行的界面,所以在DLL文件就没有必要定义Main ( )函数,来作为应用程序执行的入口。Dll.cs的源程序代码如下:
  Dll.cs:
namespace Dll file://定义了名称空间,在调用DLL的时候就要导入此名称空间。
{
  public class Show file://定义了一个类,在程序中就要来继承此类。
  { 
   public string Messages ( )
   file://定义了一个方法,此方法的作用就是返回下面字符串。
   {
    return "欢迎使用Visual C#做的DLL文件!" ;
   }
  }
}
  通过此DLL的源程序可以看出,此DLL表现为一个小型的类库,这是因为在此DLL中封装了名字叫DLL的名称空间,在此名称空间中又定义了一个Show类,在此类中有一个方法就是Messages。虽然定义的内容相对少了些,但却相当完全。
  三. 编译此DLL源代码,生成DLL文件
  要把DLL源代码编译成DLL文件,就需要配置好编译器Csc.exe的参数和开关。我们知道编译器Csc.exe可以把源代码编译成四种不同的文件,分别是控制应用程序、代码库、windows应用程序、模块程序。编译命令具体如下:
csc /target:exe myProj.cs // 创建一个myProj.exe控制程序
csc /target:winexe myProject.cs file://创建一个myProj.exe的windows程序
csc /target:library myProject.cs file://创建一个myProj.dll代码库
csc /target:module myProject.cs file://创建一个myProj.dll模块
  对于如何配置编译器Csc.exe的其他参数和开关,可以参考稍前发表的文章《如何用CSC.exe来编译Visual C#的代码文件》,在此篇文章里面有比较详细的介绍。通过以下编译命令可以得到mydll.dll文件:
Csc /r:system.dll /t:library /out:mydll.dll dll.cs
  四.用此DLL来创建一个简单的客户端程序(test.exe)
  通过以上的源程序代码可以看到生成的mydll.dll文件虽然是一个以DLL为扩展名,实际上是一个类库,和我们经常用到的System.dll、System.Windows.Forms.dll等这些文件相似。同样用mydll.dll创建程序也和用以上这些类库创建程序相类似。就是第一步就是导入此名称空间--Dll。然后在去继承里面封装好的类--Show,再调用类中定义好的方法--Messages。下面就是按照以上的步骤,创建的客户端的源程序代码( test.cs ) :
test.cs:
using Dll ; // 导入此名称空间
using System ;
public class GetMessage
{
  public static void Main ( )
  {
   Show hi = new Show ( ) ; // 继承名称空间中定义的Show类
   Console.WriteLine ( hi.Messages ( ) ) ; // 调用此类中的方法
  }
}
  在把test.cs编译成执行程序中,要在编译命令中添加一个引用,就是引用mydll.dll文件。具体的编译命令如下:
csc /r:mydll.dll /r:system.dll test.cs

五.总结:
  通过此篇文章,可以看出用Visual C#制作一个DLL其实并不是一件很复杂的事件,但对DLL的调用却和以往有了较大区别,其中最主要的原因是,用Visual C#或者其他.Net 程序开发语言制作的DLL和以前的DLL有了实质上的区别。它已经不是严格意义上的动态连接库了,而是一个类或者类库。

时间: 2024-08-03 18:11:34

Visual C#制做DLL的相关文章

深入浅出Visual C++动态链接库(Dll)编程

文章作者:宋宝华信息来源:天极网 原始连接: http://soft.yesky.com/lesson/318/2166818.shtml?412 动态链接库(DLL)是Windows系统的核心,也是COM技术的基础,因此突破动态链接库一直是技术人员的攻坚目标,本期专题将由浅入深的介绍动态链接库的基础慨念.分类.实现和应用. 基础慨念 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数

visual studio-有关DLL中申请的内存在外部释放的问题。

问题描述 有关DLL中申请的内存在外部释放的问题. 具体情况是这样的,我有应用程序,调用了一个DLL.在DLL中有一个函数,返回一个字符串指针,使用完了之后在应用程序中释放这个字符串指针. 在应用程序和DLL用同一个版本的VS编译的时候,调用是没有问题的. 当我用VS2010编译的应用程序去调用用VS2013编译的DLL时,在释放这个指针的时候应用程序就崩溃了. 有大婶知道这是怎么回事吗? 解决方案 关于在dll中申请内存,外部释放的问题关于在dll中申请内存,外部释放的问题Dll中开辟内存在外

使用ASP中的VB ActiveX.dll文件

active|activex 没有人会在没有必要的情况下采用更加麻烦的方法来工作,除非是没有选择的余地.所以如果我要告诉你有一种简单的技术可以使你的ASP开发更加快速,并且更加高效率,你一定对此特别感兴趣.这一方法将从你的ASP页中的绝大部分business logic转移到一个Visual Basic ActiveX .dll以达到提高整个网页的性能. 使用ActiveX .dll的原因 在Visual Basic中建立一个.dll文件实际上是一个ActiveX对象.这种对象可以采用微软的组件

如何在多线程中应用SpiderStudio生成的DLL

代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using www.utilities_online.info; using System.Threading; using System.Threading.Tasks; namespace ConsoleApplication4 { class Program { static void Main(string[]

【转载】MSVCR100.dll和MSVCP100.dll的区别

MSVCR100.dll This msvcr100.dll is the Microsoft Visual C++ Redistributable dll that is needed for projects built with Visual Studio 2010. The dll letters spell this out. MS = MicrosoftV = VisualC = C program languageR = Run-time100 = Version If you c

从 SOAP Toolkit 迁移到 Web 服务

web 摘要:如何从 Visual Basic 6.0 和 Visual Basic .NET 访问 Web 服务,以及如何将现有的 SOAP 应用程序转换到 .NET 平台. 目标了解 Microsoft Visual Studio .NET 中的 SOAP 工具 回顾使用 SOAP 和 Visual Basic 6.0 访问 COM/COM+ 组件 从 Visual Basic .NET 访问 Web 服务 将 SOAP Toolkit 应用程序迁移到 Web 服务 前提条件了解什么是 We

链接库动态链接库详细介绍_C 语言

windows中,链接库分为两种类型:静态链接库.lib和动态链接库.dll.其中动态链接库在被使用的时候,通常还提供一个.lib,称为引入库,它主要提供被Dll导出的函数和符号名称,使得链接的时候能够找到dll中对应的函数映射. 静态链接库和动态链接库的作用相似,都是提供给其他程序进行调用的资源.其中,动态链接库的调用方法分隐式调用(静态导入调用)和显示调用(动态导入调用).  编译环境: Microsoft Visual Stdio 2010 ------------------------

常见的ASP.NET中编译执行错误及解决方法

21.vs2005不能从源文件模式切换到视图模式 解决方法:dos下运行下 devenv /resetskippkgs (win+r cmd) 22.Validation of viewstate MAC failed 解决办法:页面的顶部page加 EnableViewState="False" EnableViewStateMac = "False" 来解决这个问题 23.Automation server can't create object"(A

利用Visual Basic把ASP编写成DLL

visual 这篇文章主要是为想将自己的ASP水平提高的人写的!把ASP代码变成组件,开发者不仅是加快了ASP的速度,而且也能保护自己的代码.这篇文章写出来,也是为了给想开发组件网友上一堂入门课! 下面,我们会来编写一个非常简单的组件,重点是知道怎样开发DLL组件,而不是其复杂的代码!这些都要靠你们自己以后的努力了. 服务器端组件 首先,服务器端的组件要有别于客户端的组件.客户端的组件是通过网络传输,依靠HTML来起作用.而且只能在IE上有用.但是服务器端的组件是运行在服务器端,它在服务器上执行