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.

謝謝.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM