C#项目中解析C++编写的.dll文件
例如:现"D:\TestInterface\"下有一个C++编写的TestInterface.dll文件,使用Depends工具查看到它含两个接口函数Sum(int addend1,int addend2)和Subtraction(int minuend,int subtrahend),需要在C#项目中进行解析调用。
用例:
[DllImport("kernel32.dll", EntryPoint = "LoadLibrary")]
public static extern int LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string lpLibFileName);
[DllImport("kernel32.dll", EntryPoint = "GetProcAddress")]
public static extern IntPtr GetProcAddress(int hModule, [MarshalAs(UnmanagedType.LPStr)] string lpProcName);
//先声明两个与接口函数相关的委托
delegate bool delegateSum(int addend1,int addend2);
delegate bool delegateSubtraction(int minuend,int subtrahend);
//定义C#项目中的Sum方法
private int Sum(int addend1,int addend2)
{
//1.从指定路径加载.dll文件
int hModule = LoadLibrary(@"D:\TestInterface\TestInterface.dll");
if (hModule == 0)
{
return false;
}
//2. 读取函数指针
IntPtr intFnPtr1 = GetProcAddress(hModule, "Sum");
//3. 将函数指针封装成委托
delegateSum _delegateSum= (delegateSum)Marshal.GetDelegateForFunctionPointer(intFnPtr1, typeof(delegateSum));
//4、返回实际操作
return _delegateSum(int addend1,int addend2);
}
//定义C#项目中的Subtraction方法
private int Subtraction(int minuend,int subtrahend)
{
//1.从指定路径加载.dll文件
int hModule = LoadLibrary(@"D:\TestInterface\TestInterface.dll");
if (hModule == 0)
{
return false;
}
//2. 读取函数指针
IntPtr intFnPtr1 = GetProcAddress(hModule, "Subtraction");
//3. 将函数指针封装成委托
delegateSubtraction _delegateSubtraction= (delegateSubtraction)Marshal.GetDelegateForFunctionPointer(intFnPtr1, typeof(delegateSubtraction));
//4、返回实际操作
return _delegateSubtraction(int minuend,int subtrahend);
}