c# 調用c++ lib靜態庫

四個步驟  

1.創建C++ Win32項目動態庫dll   

2.在Win32項目動態庫中添加 外部依賴項 lib頭文件和lib庫   

3.導出C接口

4.c#調用c++動態庫

開始你的表演...

①創建一個空白的解決方案,在解決方案中添加 Visual C++ , Win32 項目

空白解決方案的創建:

添加Visual C++ , Win32 項目

這樣一個c++的動態庫dll就創建好了,它最終會生成一個dll文件,供c#調用的。

②c++動態庫dll引用靜態庫lib

先將lib頭文件和lib庫文件複製粘貼到項目目錄下

和硬件相關的lib文件一般是分x86 和 x64的

添加外部依賴項 頭文件.h :工程---屬性---配置屬性---c/c++---常規---附加包含目錄:加上頭文件存放目錄。

注意:把配置的Debug和Release 平臺的Win32(x86) 和 x64都記得選上路徑。

添加引用lib庫:工程---屬性---配置屬性---鏈接器---常規---附加庫目錄:加上lib文件存放目錄。

注意:把配置的Debug和Release 平臺的Win32(x86) 和 x64 都對應選上,一般lib庫會有x86 和 x64 ,需要對應選擇路徑。

添加附加依賴項 lib文件名工程---屬性---配置屬性---鏈接器---輸入---附加依賴項:加上lib文件名。

注意:把配置的Debug和Release 平臺的Win32(x86) 和 x64 都對應加上lib文件名

這樣算是把lib庫引進來了。

添加Win32Project1.h頭文件。

③導出C接口

在源文件Win32Project1.cpp中引入lib頭文件並繼承lib庫,實現裏面的方法函數。

#include "stdafx.h"
#include "IntelSRUtility.h"
#include "Win32Project1.h"

class IntelSR : SRUtility
{
public:
	IntelSR() {};
	~IntelSR() {};
	BOOL ToggleSRRegkey(DWORD enable) {
		return toggleSRRegkey(enable);
	};
	BOOL ConfigureSuperResolutionMode(DWORD mode) {
		return configureSuperResolutionMode(mode);
	};
};

BOOL SetSuperRStatus(DWORD enable) {
	IntelSR *s_IntelAPI = new IntelSR();
	BOOL rm = s_IntelAPI->ToggleSRRegkey(enable);
	delete s_IntelAPI;
	return rm;
}

BOOL SetSuperRMode(DWORD mode) {
	IntelSR *s_IntelAPI = new IntelSR();
	BOOL rm = s_IntelAPI->ToggleSRRegkey(mode);
	delete s_IntelAPI;
	return rm;
}

在頭文件Win32Project1.h中導出c接口

#pragma once
#define PLUGIN_API __declspec(dllexport)
typedef int                 BOOL;
typedef unsigned long       DWORD;

extern "C" PLUGIN_API BOOL SetSuperRStatus(DWORD enable);

extern "C" PLUGIN_API BOOL SetSuperRMode(DWORD mode);

重新生成解決方案,在項目根目錄找到dll文件

這樣你拿到C++的動態庫就可以用c#調用了

④c# 調用c++動態庫。

把c++動態庫dll拷貝到c#的項目bin目錄下面,在c#中調用。

/// <summary>
/// SR開關
/// </summary>
/// <param name="enable">1將在驅動程序中啓用SR, 0將禁用SR</param>
/// <returns>成功時返回0</returns>
[DllImport("Win32Project1.dll", EntryPoint = "SetSuperRStatus", CallingConvention = CallingConvention.Cdecl)]
public static extern int SetSuperRStatus(int enable);

/// <summary>
/// SR模式
/// </summary>
/// <param name="mode">0表示默認模式,1表示質量模式(低性能),2表示混合模式,3表示性能模式(低質量)</param>
/// <returns>成功時返回0</returns>
[DllImport("Win32Project1.dll", EntryPoint = "SetSuperRMode", CallingConvention = CallingConvention.Cdecl)]
public static extern int SetSuperRMode(int mode);

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章