程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#調用c++的動態庫dll演示例程

C#調用c++的動態庫dll演示例程

編輯:C#入門知識

C#調用c++的動態庫dll演示例程


1.首先編寫c++動態庫

extern "C" __declspec(dllexport)
int __stdcall add(int x, int y)
{
	return x + y;
}

\

extern "C" __declspec(dllexport)

extern "C"使得在C++中使用C編譯方式成為可能。在“C++”下定義“C”函數,需要加extern “C”關鍵詞。用extern "C"來指明該函數使用C編譯方式。輸出的“C”函數可以從“C”代碼裡調用.
使用微軟專用的_declspec (dllexport)
cpp文件在編譯為OBJ文件時要對函數進行重新命名,C語言會把函數name重新命名為_name,而C++會重新命名為_name@@decoration,
extern "C"表示用C語言的格式將函數重命名
要輸出整個的類,對類使用_declspec(_dllexpot);要輸出類的成員函數,則對該函數使用_declspec(_dllexport)


__stdcall 限定修飾符需要添加。不加這個限定符,不能成功調用,不知道為什麼??


2.c#調用c++dll庫中封裝的接口函數

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;//

public class DLL
{
    [DllImport("DLLCpp.dll", EntryPoint = "add")]

    public extern static int add(int x, int y);//與dll中一致 
}

namespace DLLTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int ret = DLL.add(2, 3);
            Console.WriteLine(ret);
            Console.ReadKey();           
        }
    }
}

using System.Runtime.InteropServices;

一般用到其中的DllImport,它用來調用windows中一些DLL的函數(Windows API),或調用自己用c++寫的DLL中的函數

public class DLL
{
[DllImport("DLLCpp.dll", EntryPoint = "add")]


public extern static int add(int x, int y);//與dll中一致
}

注意:c#如果是64位的環境,c++封裝動態庫的時候,設置為x64。 32位為什麼不能調用,還不清楚?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved