- 浏览: 612062 次
- 性别:
- 来自: 卡哇伊
文章分类
- 全部博客 (299)
- C# (25)
- Java (1)
- WinForm (0)
- Asp.Net (86)
- Jsp (2)
- Php (1)
- Web Service (0)
- Desgin Patterns (19)
- Data Structure & Algorithms (1)
- SQLserver (41)
- Mysql (0)
- Oracle (2)
- Javascript (50)
- Ajax (10)
- Jquery (1)
- Flex (0)
- Regular Expression (5)
- DIV+CSS+XHTML+XML (18)
- Software Test (0)
- Linux (0)
- Utility (17)
- Net Digest (4)
- windows 2003 (10)
- Other (4)
- English (1)
- IT Term (1)
最新评论
-
w497480098h:
学习了 很好谢谢
SQL Server下无限多级别分类查询解决办法(简单查询树形结构数据库表) -
main_fun:
确实不错
iframe自适应高度 -
jveqi:
...
DBA -
mxcie:
其它版本没有确认,今天使用vs2003时,其.sln文件也需要 ...
彻底删除项目的VSS源代码管理信息 -
moneyprosper:
就只有IE支持,火狐和谷歌都不支持此种方法。正在寻找中。。。
从父页面读取和操作iframe中内容方法
C# 语言是一种简单但功能强大的编程语言,用于编写企业应用程序。
C# 语言从C和 C++语言演化而来,在语句、表达式和运算符方面使用了许多 C++ 功能。
C# 语言在类型安全性、版本转换、事件和垃圾回收等方面进行了相当大的改进和创新。
C# 语言提供对常用 API 样式(如 .NET 框架、COM、自动化和 C 样式 API 等)的访问。
什么是动态链接库?DLL三个字母对于你来说一定很熟悉吧,它是Dynamic Link Library 的缩写形式,动态链接库 (DLL) 是作为共享函数库的可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。
和大多数程序员一样,你一定很使用过DLL吧。也曾感受到它的带给你程序设计和编码上的好处吧今天我想和大家探讨一个主题:如何在C#创建和调用DLL(动态链接库), 其实在很大意义上而讲,DLL让我更灵活的组织编写我们的应用程序,作为软件设计者,可一个根据它来达到很高的代码重用效果。下面我来介绍一下在C#中如何创建和调用DLL。
第一种 新建一个“类库”工程,把类写到里面,生成一下就是一个dll文件
然后在你所创文件包中debug里就可以找到你本的dll了
第二种:就是详细步骤
准备工作
我们需要对我们接下来要做的事情做个简单的介绍,在本文我们将利用C#语言创建一个名为 MyDLL.DLL的动态链接库,在这个动态链接库文件中我们将提供两个功能一个是对两个参数交换他们的值,另一个功能是求两个参数的最大公约数。然后创建一个应用程序使用这个DLL。运行并输出结果。
三、 创建DLL
让我们创建以下三个C#代码文件:
MySwap.cs using System; namespace MyMethods { public class SwapClass { public static bool Swap(ref long i,ref long j) { i = i+j; j = i-j; i = i-j; return true; } } }
//MyMaxCD.cs using System; namespace MyMethods { public class MaxCDClass { public static long MaxCD(long i, long j) { long a,b,temp; if(i>j) { a = i; b = j; } else { b = i; a = j; } temp = a % b; while(temp!=0) { a = b; b = temp; temp = a % b; } return b; } } } }
需要注意的是:我们在制作这两个文件的时候可以用Visual Studio.NET或者其他的文本编辑器,就算是记事本也可以。这两个文件虽然不在同一个文件里面,但是他们是属于同一个namespace(名称空间)这对以后我们使用这两个方法提供了方便。当然他们也可以属于不同的名称空间,这是完全可以的,但只是在我们应用他们的时候就需要引用两个不同的名称空间,所以作者建议还是写在一个名称空间下面比较好。
接下来的任务是把这两个cs文件变成我们需要的DLL文件。方法是这样的:
在安装了Microsoft.NET Framework的操作系统上,我们可以在Windows所在目录下找到Microsoft.NET目录。在这个目录下面提供了C#的编译器,CSC.EXE
运行:csc /target:library /out:MyDLL.DLL MySwap.cs MyMaxCD.cs
如:csc /target:library /out:d:\MyDLL.DLL D:\Class1.cs D:\Class2.cs
完成后可在本目录下面找到我们刚才生成的MyDLL.DLL文件
/target:library 编译器选项通知编译器输出 DLL 文件而不是 EXE 文件。后跟文件名的 /out 编译器选项用于指定 DLL 文件名。
如果/out后面不跟文件名编译器使用第一个文件 (MySwap.cs) 作为 DLL 文件名。生成的文件为MySwap.DLL文件
OK!我们创建动态链接库文件的任务完成了,现在是我们享受劳动成果的时候了,下面我将介绍如何使用我们所创建的动态链接库文件。
四.使用DLL
我们简单写一个小程序来测试一下我们刚才写的两个方法是否正确,好吧,跟我来:
//MyClient.cs using System; using MyMethods; //这里我们引用刚才定义的名称空间,如果刚才的两个文件我们写在两个不同的名称空间 class MyClient { public static void Main(string[] args) { if (args.Length != 2) { Console.WriteLine("Usage: MyClient "); return; } long num1 = long.Parse(args[0]); long num2 = long.Parse(args[1]); SwapClass.Swap(ref num1,ref num2); // 请注意,文件开头的 using 指令使您得以在编译时使用未限定的类名来引用 DLL 方法 Console.WriteLine("The result of swap is num1 = {0} and num2 ={1}",num1, num2); long maxcd = MaxCDClass.MaxCD(num1,num2); Console.WriteLine("The MaxCD of {0} and {1} is {2}",num1, num2, maxcd); } }
若要生成可执行文件 MyClient.exe,请使用以下命令行:
csc /out:MyClient.exe /reference:MyLibrary.DLL MyClient.cs
如:csc /out:d:\MyClient.exe /reference:F:\ConsoleApplication1\ConsoleApplication1\bin\Debug\MyDLL.DLL F:\ConsoleApplication1\ConsoleApplication1\Program.cs
/out 编译器选项通知编译器输出 EXE 文件并且指定输出文件名 (MyClient.exe)。/reference 编译器选项指定该程序所引用的 DLL 文件如:以上命令中(F:\ConsoleApplication\ConsoleApplication1\bin\Debug\MyDLL.DLL).
五、 执行
若要运行程序,请输入 EXE 文件的名称,文件名的后面跟两个数字,例如:
MyClient 123 456
C#参数传递的方法,从solution中左键点击Properties->Debug->Start Option->Commend line arguments键入参数 用空格分开
六、 输出
The result of swap is num1 = 456 and num2 = 123
The MaxCD of 456 and 123 is 3
七、 小结
动态链接具有下列优点:
节省内存和减少交换操作。很多进程可以同时使用一个 DLL,在内存中共享该 DLL 的一个副本。相反,对于每个用静态链接库生成的应用程序,Windows 必须在内存中加载库代码的一个副本。
节省磁盘空间。许多应用程序可在磁盘上共享 DLL 的一个副本。相反,每个用静态链接库生成的应用程序均具有作为单独的副本链接到其可执行图像中的库代码。
升级到 DLL 更为容易。DLL 中的函数更改时,只要函数的参数和返回值没有更改,就不需重新编译或重新链接使用它们的应用程序。相反,静态链接的对象代码要求在函数更改时重新链接应用程序。
提供售后支持。例如,可修改显示器驱动程序 DLL 以支持当初交付应用程序时不可用的显示器。
支持多语言程序。只要程序遵循函数的调用约定,用不同编程语言编写的程序就可以调用相同的 DLL 函数。程序与 DLL 函数在下列方面必须是兼容的:函数期望其参数被推送到堆栈上的顺序,是函数还是应用程序负责清理堆栈,以及寄存器中是否传递了任何参数。
提供了扩展 MFC 库类的机制。可以从现有 MFC 类派生类,并将它们放到 MFC 扩展 DLL 中供 MFC 应用程序使用。
使国际版本的创建轻松完成。通过将资源放到 DLL 中,创建应用程序的国际版本变得容易得多。可将用于应用程序的每个语言版本的字符串放到单独的 DLL 资源文件中,并使不同的语言版本加载合适的资源。
使用 DLL 的一个潜在缺点是应用程序不是独立的;它取决于是否存在单独的 DLL 模块。
发表评论
-
向SqlCommand对象的ParameterCollections集合添加参数时犯的低级错误
2009-10-23 16:58 1496今天写代码遇到了一个小小的问题看来是基础不过关啊,嘿嘿. ... -
数字金额转为大写金额
2009-10-21 16:46 1261方法一: /// <summary> ... -
格式化文件大小的C#方法
2009-10-21 10:31 1811/// <summary> // ... -
学习C#:Attribute与Property
2009-10-04 14:23 2765一.什么是Attribute 先看下面的三段代码: ... -
String和StringBuilder的区别和使用
2009-08-11 10:22 1272String是固定不变的,在进行字符串连接的时候是新建一 ... -
C#值类型后面加问号表示可为空null(Nullable 结构)
2009-08-04 14:38 7975值类型后面加问号表示可为空null(Nullable 结构)N ... -
C# 替换去除HTML标记方法(正则表达式)
2009-07-31 11:02 8634using System.Text.RegularExpres ... -
C#里面比较时间大小三种方法
2009-07-29 12:55 12211。比较时间大小的实验 string str1 ... -
DataTime.Ticks
2009-07-29 07:30 4483java Date.getTime() getTime pub ... -
.net读取和写入txt文件
2009-07-21 23:34 7339//检查文件,如果文件不 ... -
Static方法
2009-07-19 23:28 8561.static方法是类中的一个成员方法,属于整个类,即使不用 ... -
C#中判断空字符串的3种方法性能分析
2009-07-02 08:47 12363种方法分别是: string a="&qu ... -
ASP.NET发布网站解决方案
2009-06-30 14:31 5358对于想了解发布网站那 ... -
C#中@的用法
2009-06-28 06:13 8631. 加在字符串前面,字符串中的 \ 失去转义符的作用,直接 ... -
C#项目引用完全相同dll文件的问题解决方法(反射)
2009-06-25 19:52 7214今天有开发人员问我一个问题,他的项目中要引用两个类库,这两 ... -
ADO.NET事务
2009-06-23 14:07 978private void DemoTranscation() ... -
null,"",String.Empty的区别
2009-06-16 16:37 11681.null null 关键字是表示不引用任何对象的空引用 ... -
C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
2009-06-13 14:56 10941.C#类和接口的区别 ... -
Asp.net日期格式
2009-06-06 18:37 1283DateTime dt = DateTime.Now; ... -
GUID介绍
2009-05-22 08:56 1600GUID(全局统一标识符) ...
相关推荐
本文将详细介绍如何使用C#生成DLL以及如何在C#程序中调用自动生成的DLL。 一、生成C# DLL 1. 创建类库项目: 首先,我们需要在Visual Studio中创建一个新的项目。选择“文件” -> “新建” -> “项目”,在项目...
7. 编译项目,生成Dll文件。 完成C#部分后,我们转向VB6环境进行调用: 1. 确保目标机器已安装.NET Framework 2.0或更高版本,最好是与C#项目匹配的版本。 2. 将C#生成的Dll文件复制到VB6项目的目标文件夹。 3. ...
在IT领域,特别是软件开发行业中,将C#源代码(CS文件)编译成动态链接库(DLL文件)是一项常见的需求。本文将详细介绍如何通过Windows自带的命令行工具CMD(DOS方式)来实现这一过程,确保开发者能够快速、有效地...
"VC++调用C#生成DLL的两种方法" 本文主要介绍了如何使用VC++调用C#生成的DLL文件,讨论了C#生成的DLL文件与传统DLL文件的区别,以及如何在VC++中调用C#生成的DLL文件。 C#生成的DLL文件与传统DLL文件的区别 C#...
- **添加C# DLL文件:** 将之前生成的`COMTest.dll`和`COMTest.tlb`文件复制到C++项目的`Debug`目录下。 - **注册COM组件:** 使用`gacutil`和`regasm`工具注册`COMTest.dll`。 - **编写桥接代码:** - 在`...
- 重新生成DLL文件(假设名为`abc.dll`),这个DLL文件将被VFP用来调用C#编写的函数。 #### 知识点三:VFP端的调用过程 1. **声明和创建对象**: - 在VFP中,首先需要声明要调用的C#方法: ```vfp DECLARE ...
在 Visual Studio 中,开发者可以生成DLL文件,以便将用户控件封装起来供其他项目调用。本文将介绍如何在 VS 中生成用户控件的DLL文件,包括创建新项目、设置输出类型、生成DLL文件、引用DLL文件等步骤。 一、创建...
使用 C# 创建一个类库项目,生成 COMTest.dll 和 COMTest.tlb 文件。需要设置强签名,并在 AssemblyInfo.cs 文件中将 `[assembly: ComVisible(false)]` 属性改成 `[assembly: ComVisible(true)]`。 步骤 2:使用 ...
对于C#调用VC++生成的非托管DLL,情况相对简单,因为非托管DLL可以直接被任何支持DLL导入的语言调用。但是,当C#需要调用托管的VC++ DLL时,需要使用PInvoke(Platform Invoke)或者C++/CLI来创建一个桥接层,使C#...
#### 一、使用 *.aspx 和 *.cs 代码生成 DLL 这种类型的自定义控件通常应用于 WebForm 项目中。通过结合 HTML(*.aspx)与 C#(*.cs)代码,开发者可以构建出功能强大的用户界面组件。下面是一个详细的步骤指南: ...
C# DLL 学习例子详解 DLL(Dynamic Link Library)是Windows操作系统中的一种共享库,它包含可由多个程序同时使用的代码和数据。在C#编程中,创建和使用DLL可以帮助我们实现代码重用,提高程序性能,以及降低内存...
总结,C#创建和使用DLL的过程涉及创建项目、编写共享代码、生成DLL、引用DLL以及在其他项目中调用其方法。"c# helloworld dll"是一个很好的起点,它帮助开发者理解和实践DLL的创建和引用,而这些技能在实际的软件...
这个模板会为你生成一个基础的C#类库项目,它的目标就是生成DLL文件。默认情况下,项目会包含一个名为`Class1.cs`的源文件,你可以在这个文件中编写公共类和方法,这些将成为DLL的接口。 例如,假设我们创建一个名...
C# 编译生成 dll 文件供程序调用的两种方法 C# 编译生成 dll 文件供程序调用的两种方法是开发者在实际项目中常用的技术之一。下面将详细介绍这两种方法的实现步骤和注意事项。 一、使用 Visual Studio 创建动态 ...
在ASP.NET开发过程中,将C#代码文件(.cs)编译成动态链接库(.dll)是非常常见的一项操作。这样做不仅可以提高代码的复用性,还能保护源代码不被轻易查看。本文将详细介绍如何在ASP.NET环境中使用Visual Studio.NET...
在本文档中,我们主要讨论的是C#语言在生成DLL文件的过程与方法,即如何将C#源代码文件(.cs)编译成一个动态链接库(.dll)。动态链接库(DLL)是一种在Windows操作系统中用于集中存储代码和数据的模块,这些代码和...
C#是.NET框架下广泛使用的编程语言,它支持创建DLL服务端程序,这在开发分布式系统、提供公共接口或实现组件之间交互时非常有用。下面我们将深入探讨如何在C#中编写DLL服务端程序。 首先,创建一个DLL项目: 1. ...
总结来说,C#开发DLL涉及编写包含公共方法的类,然后使用`csc.exe`或Visual Studio进行编译生成DLL文件。调用DLL则需要在项目中添加引用,引入相应的命名空间,并通过类名和方法名来调用其功能。通过这种方式,我们...
9. **使用流程**:在实际使用C#二维码生成器源码时,开发者首先需要导入`ThoughtWorks.QRCode.dll`库,然后创建二维码生成类的实例,设置参数(如容错级别、模块大小等),将要编码的数据传入,最后调用生成方法得到...
本篇文章将详细探讨如何在VS2005中创建和使用C#编写的DLL(动态链接库)。 首先,DLL是一种共享代码库,它可以被多个应用程序同时调用,从而减少内存占用和提高程序执行效率。在C#中创建DLL,我们需要遵循以下步骤...