如何利用c#创建和调用dll _c#应用

2008-02-23 05:47:01来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

一、写在前面
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。

二、准备工作

我们需要对我们接下来要做的事情做个简单的介绍,在本文我们将利用C#语言创建一个名为 MyDLL.DLL的动态链接库,在这个动态链接库文档中我们将提供两个功能一个是对两个参数交换他们的值,另一个功能是求两个参数的最大公约数。然后创建一个应用程式使用这个DLL。运行并输出结果。

三、创建DLL

让我们创建以下三个C#代码文档:

1、 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;

}

}

}

2、 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
完成后可在本目录下面找到我们刚才生成的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 <num1> <num2>");

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

/out 编译器选项通知编译器输出 EXE 文档并且指定输出文档名 (MyClient.exe)。/reference 编译器选项指定该程式所引用的 DLL 文档。

五、执行

若要运行程式,请输入 EXE 文档的名称,文档名的后面跟两个数字,例如:

MyClient 123 456

六、输出

The result of swap is num1 = 456 and num2 = 123

The MaxCD of 456 and 123 is 3

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 用c#下的raw socket编程实现网络封包监控_c#应用

下一篇: 百万程式员的苦恼-选择vb.net还是c#_c#应用