# 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