四個步驟
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);