调用dll:利用C#创建和调用DLL详解

  、写在前面

  C# 语言是种简单但功能强大编程语言用于编写企业应用

  C# 语言从C和C语言演化而来在语句、表达式和运算符方面使用了许多C 功能

  C# 语言在类型安全性、版本转换、事件和垃圾回收等方面进行了相当大改进和创新

  C# 语言提供对常用API 样式(如 .NET 框架、COM、自动化和 C 样式 API 等)访问

  和大多数定使用过DLL定曾感受到它带给你设计和编码上好处我想和大家探讨个主题:如何利用C#创建和DLL(动态链接库), 其实在很大意义上讲DLL让我们更灵活组织编写我们应用作为软件Software设计者可以根据它来达到很高代码重用效果下面我来介绍下在C#中如何创建和DLL

   2、准备工作

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

   3、创建DLL

  让我们创建以下两个C#代码文件:

  1.ySwap.cs

using ;
MyMethods
{
    public SwapClass
   {
   public bool Swap(ref long i,ref long j)
    {
   i = i+j;
   j = i-j;
   i = i-j;
    true;
}
}
}
  2.yMaxCD.cs

using ;
MyMethods
{
   public MaxCDClass
   {
     public long MaxCD(long i, long j)
     {
 long a,b,temp;
 (i>j)
 {
    a = i;
    b = j;
 }
 
 {
    b = i;
    a = j;
 }
 temp = a % b;
 while(temp!=0)
 {
    a = b;
    b = temp;
    temp = a % b;
 }
  b;
     }
   }
}
}
  需要注意是:我们在制作这两个文件时候可以用Visual Studio.NET或者其他文本编辑器就算是记事本也可以这两个文件虽然不在同个文件里面但是他们是属于同(名称空间)这对以后我们使用这两个思路方法提供了方便当然他们也可以属于区别名称空间这是完全可以但只是在我们应用它们时候就需要引用两个区别名称空间所以建议还是写在个名称空间下面比较好

  接下来任务是把这两个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!我们创建动态链接库文件任务完成了现在是我们享受劳动成果时候了下面我将介绍如何使用我们所创建动态链接库文件

   4、使用DLL

  我们简单写个小来测试下我们刚才写两个思路方法是否正确好吧跟我来:

MyClient.cs 
using ;
using MyMethods;
//这里我们引用刚才定义名称空间如果刚才两个文件我们写在两个区别名称空间
MyClient
{
   public void Main( args)
   {
     (args.Length != 2)
     {
Console.WriteLine("Usage: MyClient ");
;
     }
     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 文件

   5、执行

  若要运行请输入 EXE 文件名称文件名后面跟两个数字例如:

  MyClient 123 456

   6、输出

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

  The MaxCD of 456 and 123 is 3

   7、小结

  动态链接具有下列优点:

  节省内存和减少交换操作很多进程可以同时使用个 DLL在内存中共享该 DLL 个副本相反对于每个用静态链接库生成应用Windows 必须在内存中加载库代码个副本

  节省磁盘空间许多应用可在磁盘上共享 DLL 个副本相反每个用静态链接库生成应用均具有作为单独副本链接到其可执行图像中库代码

  升级到 DLL 更为容易DLL 中更改时只要参数和返回值没有更改就不需重新编译或重新链接使用它们应用相反静态链接对象代码要求在更改时重新链接应用

  提供售后支持例如可修改显示器驱动 DLL 以支持当初交付应用时不可用显示器

  支持多语言只要遵循约定用区别编程语言编写就可以相同 DLL 和 DLL 在下列方面必须是兼容:期望其参数被推送到堆栈上顺序还是应用负责清理堆栈以及寄存器中是否传递了任何参数

  提供了扩展 MFC 库类机制可以从现有 MFC 类派生类并将它们放到 MFC 扩展 DLL 中供 MFC 应用使用



  使国际版本创建轻松完成通过将资源放到 DLL 中创建应用国际版本变得容易得多可将用于应用每个语言版本串放到单独 DLL 资源文件中并使区别语言版本加载合适资源

  使用 DLL 个潜在缺点是应用不是独立它取决于是否存在单独 DLL 模块



Tags:  vc调用dll vb调用dll java调用dll 调用dll

延伸阅读

最新评论

发表评论