本文介绍利用 c# 创建和调用托管的 DLL 的方法和给出一个示例,采用的环境是 vs2005.
托管 DLL 的创建和调用
利用 vs2005 ,菜单,文件, c# 语言, window, 类库,代码如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace Libary_Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void Function()
{
MessageBox .Show(Class1 .Calc(10).ToString());
}
private void button1_Click(object sender, EventArgs e)
{
Function();
}
}
}
在c# 当中,我们是以命名空间来来组织的,所以在在调用的时候也是一样,编译生成dll 文件。
在写一个示例的程序来调用它。
using Libary_Sample;
namespace Libary_Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void Function()
{
MessageBox .Show(Class1 .Calc(10).ToString());
}
private void button1_Click(object sender, EventArgs e)
{
Function();
}
}
上面是代码:我们有几步需要搞清楚。
1 把之前生成的dll 文件存放在我们的调用端的文件夹中,避免丢失。
2 添加引用,在解决方案里面添加对dll 的引用。
3 添加命名空间的引用using Libary_Sample.
这样我们就完成了托管的 DLL 创建和调用!实际上可以理解相当于一个类的声明,只不过这里是以 dll 的形式,而非文件的形式!
非托管的调用:
这个我们就是称之为调用外部的 DLL, 例如用 c++ 语言编写的。
首先我们需要声明一个本地的 DLL 实现方法。具体的是用参数 static 和 extern 来声明方法,接着在声明前加上 DllImport 特性。
首先我们来详细的讲解下 DllImport 的特性和使用方法( MSDN ) , 在这里我们就是叫做平台调用( P/Invoke )
DllImport() : 该属性化方法由非托管动态链接库 (DLL) 作为静态入口点公开。
下面给出一个例子来调用 Wind32 api 函数的例子。
using System.Runtime.InteropServices;
public class Win32 {
[DllImport("user32.dll", CharSet=CharSet.Auto)]