• 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:MiloLu2015vsC#csDllcsDllinDebugcsDll.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:MiloLu2015vsC#csDllcsDllinDebugcsDll.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.

    谢谢.

  • 相关阅读:
    Thymeleaf介绍和基本语法使用
    2020版idea及没有default Settings设置的idea,修改默认maven设置、本地仓库的方法
    创建springboot项目的两种方式
    2020版IDEA新建打开*.vue文件
    IDEA新手常用快捷键
    搭建一个maven的web项目
    eclipse、idea引入外部jar包教程
    序列化笔记
    转换流笔记
    缓冲流笔记
  • 原文地址:https://www.cnblogs.com/lumao1122-Milolu/p/11951095.html
Copyright © 2020-2023  润新知