C#調用C++類庫例子


 

一、新建一個解決方案,並在解決方案下添加一個.netframework的項目,命名為FrameworkConsoleTest。再添加一個C++的動態鏈接庫DLL項目,命名為EncryptBase。

 

二、將C++項目EncryptBase設為按64位生成部署。(如果你電腦是32位系統就設x86,是64位系統就設x64)

 

 

三、將解決方案設為“當前選定內容”啟動。

 

四、在EncryptBase頭文件,右鍵--添加--新建項,添加一個EncryptBase.h的頭文件。

1、添加以下代碼:

#ifndef _ENCRYPTBASE_H //定義_ENRYPTBASE_H宏,是為了防止頭文件的重復引用
#define _ENCRYPTBASE_H

#ifdef __cplusplus //而這一部分就是告訴編譯器,如果定義了__cplusplus(即如果是cpp文件, 
extern "C" { //因為cpp文件默認定義了該宏),則采用C語言方式進行編譯
#endif


#ifdef DLL_EXPORTS  
#define DLL_EXPORTS __declspec(dllexport)   
#else  
#define DLL_EXPORTS __declspec(dllimport)   
#endif  
    
    DLL_EXPORTS int Sum(int value1, int value2);

#ifdef __cplusplus
}
#endif


#endif // !_ENCRYPTBASE_H

  

2、添加后如圖所示:

 

五、在FrameworkConsoleTest項目的Program修改為以下代碼。

 

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

namespace FrameworkConsoleTest
{
    class Program
    {
        [DllImport("EncryptBase.dll", CallingConvention = CallingConvention.Cdecl)]
        static extern int Sum(int value1, int value2);

        static void Main(string[] args)
        {
            int sumValue = Sum(1, 2);
            Console.WriteLine("sumValue:"+sumValue);
        }
    }
}

修改后如圖所示:

 

六、在EncryptBase項目,右鍵--屬性--生成事件--生成后事件--命令行--編輯。設置生成后事件之后,編輯EncryptBase項目就不用每次將bin的dll復制到FrameworkConsoleTest項目了。

 

 

2、輸入以下內容:

copy "$(OutputPath)$(TargetFileName)" "$(SolutionDir)FrameworkConsoleTest\bin\Debug"
copy "$(OutputPath)EncryptBase.pdb" "$(SolutionDir)FrameworkConsoleTest\bin\Debug"

 

 

3、設置后如下所示:

 

 

 

4、生成EncryptBase項目。

 

六、在FrameworkConsoleTest,右鍵屬性--生成--取消勾選"首選32位"。

 

七、運行。

在FrameworkConsoleTest項目,組合按Ctrl+F5,可顯示調用結果。如下圖所示。

 

八、文件已上傳,可點擊下載。

https://files.cnblogs.com/files/suterfo/AuthorizationTest(Demo1).rar

 


免責聲明!

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



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