C#引用C++開發的DLL

C#語言使用方便,入門門檻較代,上手容易,而且語法與C,java有很相似的地方,IDE作的也好,通用性好,是MS下一代開發的主要力量.可是其開源代碼較少,類庫不是十分完美,在架構方面還有一些須要作的工做.java

C++寫的程序佔用內存較小,直接對內存或者文件操做,所以一些關鍵的步驟或者一些最內層的循環在必定程序上還須要依賴C++.ios

 下面我作一些簡單的例子架構

 C++編寫DLL函數

QpHelper.hspa

#pragma once
class QpHelper
{
public:
    // Returns a + b
    // 設置爲導出函數,並採用C風格。函數前加extern "C" __declspec(dllexport)
    // 定義函數在退出前本身清空堆棧,在函數前加__stdcall。
    static __declspec(dllexport) int __stdcall add(int a, int b);

    // Returns a - b
    static __declspec(dllexport) int __stdcall sub(int a, int b);
};

QpHelper.cppcode

#include "QpHelper.h"

int QpHelper::add(int a, int b)
{
    return (a + b);
}

int QpHelper::sub(int a, int b)
{
    return (a - b);
}

extern "C" __declspec(dllexport) int Add(int a, int b)
{

    return a + b;
}

 C++調用C++ DLLblog

 Test.cpp內存

// Test.cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
#include "QpHelper.h"
#include <iostream>
using namespace std;

// 靜態方式調用DLL
#pragma comment(lib,"MyDllDemo.lib")

int main()
{
    QpHelper qpHelper;

    int result = qpHelper.add(4, 5);

    cout << qpHelper.add(4, 5) << endl;

    cout << qpHelper.sub(4, 5) << endl;

    return 0;
}

運行效果:開發

C#調用C++ DLLstring

using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {

        [DllImport("MyDllDemo.dll", EntryPoint = "Add", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
        public static extern int Add(int a, int b); //DllImport請參照MSDN

        static void Main(string[] args)
        {
            Console.WriteLine(Add(1, 2));
            Console.Read();
        }
    }
}

運行效果:

相關文章
相關標籤/搜索