# Windows运行时dll_import
**Repository Path**: zxthex/dll_import_at_windows_runtime
## Basic Information
- **Project Name**: Windows运行时dll_import
- **Description**: 在程序运行时动态加载、卸载dll
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2019-04-17
- **Last Updated**: 2021-04-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Windows运行时dll_import
#### 介绍
在程序运行时动态加载、卸载dll
#### 使用说明
如下,编写一个类继承自ZXthex,传递参数为dll地址。
获取函数时,需要先定义一个相同结构的委托类型,并以此来接收所需函数指针。注意由于目前Marshal.GetDelegateForFunctionPointer方法的限制,不能使用泛型委托。
GetFunction方法使用了C#7.3中新增的委托约束,如果要使用以前C#版本可将委托约束改成class约束。
注意示例dlls文件夹中的3个dll均是x64的
```
sealed class ExampleA : ZXthex.FromC
{
public delegate float AddFunction(float v1, float v2);
AddFunction func;
///
///
/// #include "stdafx.h"
///
/// EXTERN_C{
///
/// __declspec(dllexport)
/// float addx(float value1, float value2)
/// {
///
/// return value1 + value2;
/// }
/// }
///
///
public ExampleA() : base(@"dlls/Dll1x.dll")
{
func = GetFunction("addx");
}
public float Add(float v1, float v2)
{
return func.Invoke(v1, v2);
}
}
```
初期框架来自十年前的这篇文章(by Namdn):
https://www.codeproject.com/Articles/27298/Dynamic-Invoke-C-DLL-function-in-C
对于C++的模板(template)函数由于机制原因无法用泛型捕获:
https://stackoverflow.com/questions/14084692/p-invoke-c-templatet-method-from-c-sharp
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request