vc++中編寫Dll,在C#(WPF)中引用


在VC++中寫Dll,然后在C#(WPF)中引用. 我這樣做的初衷是因為用WPF設計軟件的界面比較好看,也方便.

用VC++寫的程序效率較高,移植性好,關鍵是其他幾個同事擅長的是Vc++.合作開發的一個不錯的選擇就是用dll把各種功能模塊匯聚到WPF的界面下.

1 首先,打開VS2010,新建一個VC++的類庫工程.

1

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


免責聲明!

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



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