`
javatoyou
  • 浏览: 1070676 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

如何利用C#创建和调用DLL

阅读更多

如何利用C#创建和调用DLL

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

七、小结

动态链接具有下列优点:

节省内存和减少交换操作。很多进程可以同时使用一个 DLL,在内存中共享该 DLL 的一个副本。相反,对于每个用静态链接库生成的应用程序,Windows 必须在内存中加载库代码的一个副本。
节省磁盘空间。许多应用程序可在磁盘上共享 DLL 的一个副本。相反,每个用静态链接库生成的应用程序均具有作为单独的副本链接到其可执行图像中的库代码。
升级到 DLL 更为容易。DLL 中的函数更改时,只要函数的参数和返回值没有更改,就不需重新编译或重新链接使用它们的应用程序。相反,静态链接的对象代码要求在函数更改时重新链接应用程序。
提供售后支持。例如,可修改显示器驱动程序 DLL 以支持当初交付应用程序时不可用的显示器。
支持多语言程序。只要程序遵循函数的调用约定,用不同编程语言编写的程序就可以调用相同的 DLL 函数。程序与 DLL 函数在下列方面必须是兼容的:函数期望其参数被推送到堆栈上的顺序,是函数还是应用程序负责清理堆栈,以及寄存器中是否传递了任何参数。
提供了扩展 MFC 库类的机制。可以从现有 MFC 类派生类,并将它们放到 MFC 扩展 DLL 中供 MFC 应用程序使用。
使国际版本的创建轻松完成。通过将资源放到 DLL 中,创建应用程序的国际版本变得容易得多。可将用于应用程序的每个语言版本的字符串放到单独的 DLL 资源文件中,并使不同的语言版本加载合适的资源。
使用 DLL 的一个潜在缺点是应用程序不是独立的;它取决于是否存在单独的 DLL 模块。

分享到:
评论

相关推荐

    如何利用C#创建和调用DLL[文].pdf

    在C#中创建和调用DLL涉及到的关键知识点有: 1. **C#语言特性**:C#是一种面向对象的编程语言,具有类型安全、垃圾回收机制、事件处理以及强大的.NET框架支持。它从C和C++中吸取了许多语法特性,但提供了更多现代...

    C#中创建和调用DLL实例

    下面将详细讲解如何在C#中创建和调用DLL实例。 首先,我们需要创建一个DLL项目。在Visual Studio中,选择"新建项目",然后在模板中找到"C#类库"项目。给项目命名,例如"myDLL",并点击"创建"。在新创建的类库项目中...

    C#中创建及调用DLL

    在C#中,创建和调用DLL是常见的操作,尤其在实现模块化开发或者跨项目复用代码时。本篇文章将深入探讨如何在C#中创建DLL以及如何在其他应用程序中调用这些DLL。 首先,我们来了解如何创建一个C# DLL。创建DLL的过程...

    C#开发和调用DLL动态库的程序Demo

    在.NET框架中,C#是一种常用的编程语言,它支持创建和使用DLL(Dynamic Link Library)动态链接库。DLL是Windows操作系统中的一个重要组成部分,允许不同应用程序共享代码和资源,从而节省内存并提高执行效率。本...

    c#中如何调用外部DLL

    #### 一、C#调用DLL的基本原理 在C#中调用外部DLL主要依赖于`DllImport`属性。`DllImport`是.NET Framework提供的一种机制,用于声明一个托管方法(即C#方法)实际上是从非托管代码(即DLL)中导入的。这种方法允许...

    C#Winform动态调用C++和C#的Dll

    5. 调用DLL中的方法:使用反射找到DLL中的类型和方法,然后创建委托并调用。 ```csharp Type cPlusPlusType = cPlusPlusDllAssembly.GetType("YourNamespace.YourCppClass"); MethodInfo methodInfo = ...

    c#调用dll示例

    C#调用DLL(动态链接库)的示例就是这样的一个场景,它允许C#代码利用C++编写的底层库,从而结合了C#的易用性和C++的高效性。 在C++中创建DLL文件通常涉及以下步骤: 1. 定义导出函数:在C++源文件中,使用`__...

    C#调用QT的dll方法

    五、C#调用dll方法 要在C#中调用dll方法,我们可以使用DllImport特性。例如: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime....

    C#调用易语言编写的DLL

    总结来说,C#调用易语言编写的DLL涉及易语言DLL的创建、接口理解、C#中的引用、函数调用以及必要的数据类型转换和错误处理。通过这种方式,我们可以结合两种语言的优势,利用易语言的高效开发和C#的强大框架功能。

    c#创建、调用Dll动态链接库

    本篇将详细介绍如何使用C#创建和调用DLL,以及DLL在代码封装和保护中的作用。 首先,要创建DLL,你需要使用Visual Studio开发环境。以Visual Studio 2005或更高版本为例,创建DLL的步骤如下: 1. 在Visual Studio...

    C#调用C++动态DLL

    4. **调用DLL函数**:现在,你可以创建一个委托类型的实例,并用它来调用DLL中的函数。例如,如果你有一个名为`MyFunction`的C++函数,你可以这样做: ```csharp [DllImport("myDLL.dll", CallingConvention = ...

    delphi调用C# DLL

    - 这将创建一个新的单元文件,其中包含了用于调用DLL组件的方法声明。 2. **实例化并调用DLL中的方法**: - 可以通过两种方式实例化.NET组件对象:直接创建对象或使用变体。 - 直接创建对象示例: ```pascal ...

    pb9.0调用c#dll

    4. **调用DLL方法**: 在PB中实例化这个COM对象,然后就可以像调用PB内置函数一样调用C# DLL的方法了。例如,如果你有一个名为`MyMethod`的方法,可以这样调用: ```pb COMObject myCom = Create COMObject ...

    Pb调用 c#编写的DLL

    虽然PB因其简单性和低成本而受到青睐,但其技术限制使得开发者寻求更强大的解决方案,比如利用C#编写的DLL扩展其功能。 首先,在Visual Studio 2008 SP1中创建一个新的C#项目。为了使PB能够调用C# DLL,我们需要...

    bartender 10.0 C#动态调用DLL

    在.NET框架下,C#可以使用`System.Reflection`命名空间的类,如`Assembly`和`Type`,来动态加载和调用DLL中的方法。这种方法允许程序在运行时决定要执行哪个特定的DLL功能,增强了代码的灵活性。 1. **加载DLL**:...

    C#与C++之间DLL文件的创建与调用DEMO演示

    本主题聚焦于如何在C#和C++之间创建和调用DLL(动态链接库)文件,以实现这种交互。DLL是一种共享库,它包含可由多个程序同时使用的函数和资源,有助于减少内存占用和代码重复。 首先,我们需要了解在C++中创建DLL...

    C#DLL调用.rar_C# 调用 C++的DLL_C# 调用DLL库_c# 调用dll_c#调用C++dll_c#调用dll

    3. **调用DLL函数**:在完成上述步骤后,你可以在C#代码中像调用普通方法一样调用DLL中的函数。例如: ```csharp int result = YourFunctionName(123, "Hello"); ``` 4. **异常处理**:由于调用非托管代码可能会...

    PB调用C#写的dll文件

    5. **调用DLL方法**:在PB的代码窗口中,可以像调用任何其他PB对象一样,调用C# DLL的方法。 6. **调试与优化**:进行必要的测试和调试,确保PB能正确调用C# DLL的功能,并根据需要进行优化。 在压缩包文件的“PB...

Global site tag (gtag.js) - Google Analytics