C#编程之利用C#创建dll并调用(三)

前两章我们是利用c#调用c++编写的动态库,这一章我们说一下,如何用C#创建动态库并实现调用。

其实,c#创建dll和创建class类是一个道理,只不过dll是class库的集合。

所以我们创建工程一个class Libary类型工程 New project --- Class Libary , 这里工程命名为:csDll,这个也是我们生成动态库文件名称。

接着我们添加我们的加减乘除运算算法:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace csDll
 8 {
 9     public class Class1
10     {
11         /// c='+': addition,c='-':subtraction,c='*':multiplication,c='/':division
12         public double Calculation(double a, double b, char c)
13         {
14             double result;
15             switch (c)
16             {
17                 case '+':
18                     result = a + b;
19                     break;
20                 case '-':
21                     result = a - b;
22                     break;
23                 case '*':
24                     result = a * b;
25                     break;
26                 case '/':
27                     if (b != 0)
28                     {
29                         result = a / b;
30                     }
31                     else
32                     {
33                         result = 0;
34                     }
35                     break;
36                 default:
37                     result = 0;
38                     break;
39             }
40             return result;
41         }
42     }
43 }

编译后,我们将得到我们的csDLL.dll文件

紧着我们来实现应用程序调用这个动态库函数算法。

同样,我们以我们的上一章的应用程序作为修改,添加dll至工程内:

接着导入路径:

 [DllImport(@"F:\MiloLu\2015\vs\C#\csDll\csDll\bin\Debug\csDll.dll")]  

接着同样是申明函数入口名称,这里和之前一样,可以保持不变: public static extern double calculat(double a, double b, char c); 

唯一不同的是,我们调用c#创建生成的dll需要实例对象后才可以使用其内的对象入口函数,即:

 csDll.Class1 exampleDll = new csDll.Class1(); 之后我们就可以使用这个对象进行访问其内的入口函数了:

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Runtime.InteropServices;

namespace WpfControls
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        [DllImport(@"F:\MiloLu\2015\vs\C#\csDll\csDll\bin\Debug\csDll.dll")]
        public static extern double calculate(double a, double b, char c);
        csDll.Class1 exampleDll = new csDll.Class1();
        public MainWindow()
        {
           InitializeComponent();
        }

        private void Click_submiit(object sender, RoutedEventArgs e)
        {
            try
            {
                double a = Convert.ToDouble(m_edit1.Text);
                double b = Convert.ToDouble(m_edit2.Text);
                char c = Convert.ToChar(m_edit4.Text);
                double result =exampleDll.Calculation(a, b, c);
                m_edit3.Text = result.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void Click_clean(object sender, RoutedEventArgs e)
        {
            m_edit1.Text = m_edit2.Text = m_edit3.Text = "0";
            m_edit4.Text = "+";
        }
    }
}
View Code

编译运行,我们实现了同样的效果:

 

End.

谢谢.

posted on 2019-11-28 16:52  Milo_lu  阅读(1005)  评论(0编辑  收藏  举报

导航