在VC++中寫Dll,然后在C#(WPF)中引用. 我這樣做的初衷是因為用WPF設計軟件的界面比較好看,也方便.
用VC++寫的程序效率較高,移植性好,關鍵是其他幾個同事擅長的是Vc++.合作開發的一個不錯的選擇就是用dll把各種功能模塊匯聚到WPF的界面下.
1 首先,打開VS2010,新建一個VC++的類庫工程.
2 新建完成之后打開MyVCLibrary.h,添加示例類的聲明.
// MyVCLibrary.h #pragma once using namespace System; namespace MyVCLibrary { public ref class MathFuc { // TODO: 在此處添加此類的方法。 public: // Returns a + b double Add(double a, double b); // Returns a - b double Subtract(double a, double b); // Returns a * b double Multiply(double a, double b); // Returns a / b // Throws DivideByZeroException if b is 0 double Divide(double a, double b); }; }
打開MyVCLibrary.cpp 加入類方法的具體實現:
// 這是主 DLL 文件。 #include "stdafx.h" #include "MyVCLibrary.h" #include <stdexcept> using namespace std; namespace MyVCLibrary { double MathFuc::Add(double a, double b) { return a + b; } double MathFuc::Subtract(double a, double b) { return a - b; } double MathFuc::Multiply(double a, double b) { return a * b; } double MathFuc::Divide(double a, double b) { if (b == 0) { throw new invalid_argument("b cannot be zero!"); } return a / b; } }
編譯,在工程的debug目錄下就會輸出一個MyVCLibrary.dll文件.
3 接下來新建一個名為TestWindow的WPF工程對我們剛才生成的dll經行測試.
點擊引用==>添加引用,將剛才vc類庫的輸出添加進來
在MainWindow.xaml加入一個RichTextbox由於顯示測試結果
<Window x:Class="TestWindow.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"> <Grid> <RichTextBox Name="message" Margin="0"/> </Grid> </Window>
測試代碼如下:
using System.Runtime.InteropServices; using System.Windows; namespace TestWindow { /// <summary> /// MainWindow.xaml 的交互邏輯 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } //引入VC6.0 創建的dll文件中的函數 [DllImport("MyLibrary.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int Sum(int a,int b); private void Window_Loaded(object sender, RoutedEventArgs e) { MyVCLibrary.MathFuc mathFuc = new MyVCLibrary.MathFuc(); message.AppendText("1+2="+mathFuc.Add(1,2)+"\r\n"); message.AppendText("5-4=" + mathFuc.Subtract(5,4) + "\r\n"); message.AppendText("2*42=" + mathFuc.Multiply(2,4) + "\r\n"); message.AppendText("10/3=" + mathFuc.Divide(10,3) + "\r\n"); message.AppendText("VC6.0 編寫的庫文件 sum(3,4)=" + Sum(3, 4) + "\r\n"); } } }
結果如下
實驗成功.
工程附上.里面還以一個用vc6.0編寫dll然后在WPF里面調用的例子,希望對大家有用.
文件名:vc6.0動態鏈接庫編程示例及說明.rar, 訪問地址:http://www.kuaipan.cn/file/id_25704335589509048.htm