




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实现了实现了 C 调用调用 C Dll 文件文件 1 Object object 类型是在 NET Framework 中的 Object 的别名 在 C 的统一类型系统中 所有类型 预定义类型 用户定义类型 引用型和值类型 都是直接或间接从 object 继承的 可以 将任何类型的值赋给 object 类型的变量 将值类型的变量转换为对象的过程成为 装箱 将对象类型的变量转为值类型的过程成为 取消装箱 C 中所有的类都直接或者间接继承自 System Object 类 这使得 C 中的类得以单根继承 如果我们没有明确指定继承类 编译器缺省认为该类继承自 System Object 类 System Object 类也可用小写的 object 关键字表示 两者完全等同 C 中所有的类都继承了 System Object 类的公共接口 剖析它们对我们理解并掌握 C 中类得行为非常重要 GetType 和 typeof 的语义相同 它们都通过查询对象的元数据来确定对象的运行时的类型 1 构造函数 作用 这个就不用多说了 注意点 直接使用 new Object 可以用来创建对象 如果非 Object 类型 则在该类型的构 造函数 被调用时 该函数自动被调用 2 Equals 函数 3 Finalize 函数 作用 允许对象在垃圾回收该对象之前尝试释放资源并执行其他清理操作 注意点 Finalize 是受保护的 因此只能通过此类或派生类访问他 4 GetHashCode 函数 作用 用作特定类型的哈希函数 注意点 适用于哈希算法和诸如哈希表之类的数据结构 5 GetType 函数 获取当前实例的确切运行时类型 注意点 6 ReferenceEquals 函数 7 MemberWiseClone 函数 作用 创建当前 Object 的浅表副本 8 ToString 函数 作用 返回一个代表当前对象的字符串 注意点 默认情况下返回的是该对象所属类型的全名称 继承类可以重写该方法 以 便自定义显示输出内容 2 C 程序生成程序生成 DLL 2 1 工程创建工程创建 创建项目 Win32 Win32 项目 名称 MyDLL 选择 DLL D 完成 2 2 文件添加文件添加 新建源文件 testdll cpp 文件中代码如下 include extern C declspec dllexport LPTSTR Init LPTSTR a strcat char a added return a extern C declspec dllexport int add int a return a 0 a 1 extern C declspec dllexport int subtract int a int b return a b 共写了三个函数 新建模块定义文件 mydll def mydll def 代码如下 EXPORTS add 最后 编译 Ctrl Shift B 生成 MyDLL dll 文件或 MyDLL lib 文件 通过更改属性来生成 dll 或者 lib 3 C 调用调用 DLL 文件文件 如下代码是调用的例子 4using System 5using System Collections Generic 6using System ComponentModel 7using System Data 8using System Drawing 9using System Linq 10using System Text 11using System Windows Forms 12using System Reflection 13using System Reflection Emit 14using System Runtime InteropServices 15 add YAHHH Z 16namespace Csharp调 用 CIPP 17 18 public partial class Form1 Form 19 20 DllImport Dll l dll 21 DllImport Dll l dll EntryPoint add ExactSpelling false CharSet CharSet Auto CallingConvention CallingConvention StdCall 22 DllImport Dll l dll EntryPoint add ExactSpelling false CallingConvention CallingConvention Cd ecl 23 static extern int add int av 24 extern static int add int a int b 25 public Form1 26 27 InitializeComponent 28 29 public enum ModePass 30 31 ByValue 0 x0001 32 ByRef 0 x0002 33 34 35 public class DLD 36 37 38 DllImport kernel32 dll 39 static extern IntPtr LoadLibrary string lpFileName 40 41 DllImport kernel32 dll 42 static extern IntPtr GetProcAddress IntPtr hModule string lpProcName 43 44 DllImport kernel32 dll EntryPoint FreeLibrary SetLastError true 45 static extern bool FreeLibrary IntPtr hModule 46 47 48 private IntPtr hModule IntPtr Zero 49 public IntPtr farProc IntPtr Zero 50 51 52 public void loadDll string lpFileName 53 54 hModule LoadLibrary lpFileName 55 if hModule IntPtr Zero 56 57 throw new Exception 没 有 D找 到 o lpFileName 文 件t 58 59 60 61 public void LoadDll IntPtr HMODULE 62 63 if HMODULE IntPtr Zero 64 throw new Exception 所 传 入 的 函 数 y库a模 块 的 句 柄 HMODULE 为a空 65 hModule HMODULE 66 67 68 public void loadFun string lpProcName 69 70 if hModule IntPtr Zero 71 72 throw new Exception 函 数 y库a模 块 的 句 柄 为a空 请 确 保 已 进 行DLoadDll操 作 73 74 farProc GetProcAddress hModule lpProcName 75 if farProc IntPtr Zero 76 77 throw new Exception 没 有 D找 到 o lpProcName 这a个 函 数 y的 入 口 点 78 79 80 public void LoadFun string lpFileName string lpProcName 81 取 得 函 数 y库a模 块 的 句 柄 82 hModule LoadLibrary lpFileName 83 84 若 函 数 y库a模 块 的 句 柄 为a空 则 抛 出 异 常 85 if hModule IntPtr Zero 86 throw new Exception 没 有 D找 到 lpFileName 87 88 取 得 函 数 y指 针 89 farProc GetProcAddress hModule lpProcName 90 91 若 函 数 y指 针 则 抛 出 异 常 92 if farProc IntPtr Zero 93 throw new Exception 没 有 D找 到 lpProcName 这a个 函 数 y的 入 口 点 94 95 96 97 public void UnLoadDll 98 99 FreeLibrary hModule 100 hModule IntPtr Zero 101 farProc IntPtr Zero 102 103 public object Invoke object ObjArray Parameter Type TypeArray ParameterType 104 ModePass ModePassArray Parameter Type Type Return String name str 105 106 107 下 面 3 个 if 是 进 行D安 2全 检 查 若 不 能 通 过y 则 抛 出 异 常 108 if hModule IntPtr Zero 109 throw new Exception 函 数 y库a模 块 的 句 柄 为a空 请 确 保 已 进 行D LoadDll 操 作 110 if farProc IntPtr Zero 111 throw new Exception 函 数 y指 针 为a空 请 确 保 已 进 行D LoadFun 操 作 112 if ObjArray Parameter Length ModePassArray Parameter Length 113 throw new Exception 参 数 y个 数 y及 其 传 递 Y方 式 的 个 数 y不 匹 配 114 115 下 面 是 创 建 MyAssemblyName 对 象 并 设 置 其 Name 属 性 116 一 个 类 在 一 个 程 序 集 里 面 所 以 先 加 载 这a个 程 序 集 根 据Y这a个 程 序 集 创 建 这a 个 类 得 实 例 y 117 AssemblyName MyAssemblyName new AssemblyName 118 MyAssemblyName Name InvokeFun 119 120 生 成 单 模 块 配 件t 121 AssemblyBuilder MyAssemblyBuilder AppDomain CurrentDomain DefineDynamicAssembly 122 MyAssemblyName AssemblyBuilderAccess Run 123 ModuleBuilder MyModuleBuilder MyAssemblyBuilder DefineDynamicModule InvokeDll 124 125 定 义 要 a调 用 的 方 法 方 法 名 为 a MyFun 返 回 类 型 是 Type Return 126 参 数 y类 型 是 TypeArray ParameterType 127 MethodBuilder MyMethodBuilder MyModuleBuilder DefineGlobalMethod 128 name str MethodAttributes Public MethodAttributes Static 129 Type Return TypeArray ParameterType 130 131 获 取 一 个 ILGenerator 用 于 发 送 所 需 的 IL 132 ILGenerator IL MyMethodBuilder GetILGenerator 133 134 int i 135 for i 0 i ObjArray Parameter Length i 136 用 循 环 将 参 数 y依 次 压1入 堆 栈 137 switch ModePassArray Parameter i 138 139 case ModePass ByValue 140 IL Emit OpCodes Ldarg i 141 break 142 case ModePass ByRef 143 IL Emit OpCodes Ldarga i 144 break 145 default 146 throw new Exception 第 i 1 ToString 个 参 数 y没 有 D给 定 正y确 的 传 递 Y方 式 147 148 149 150 if IntPtr Size 4 151 判D断 处 理 器 类 型 152 IL Emit OpCodes Ldc I4 farProc ToInt32 153 154 else if IntPtr Size 8 155 156 IL Emit OpCodes Ldc I8 farProc ToInt64 157 158 else 159 160 throw new PlatformNotSupportedException 161 162 163 IL EmitCalli OpCodes Calli CallingConvention StdCall Type Return TypeArray ParameterType 164 IL Emit OpCodes Ret 返 回 值 165 MyModuleBuilder CreateGlobalFunctions 166 167 取 得 方 法 信 息 168 MethodInfo MyMethodInfo MyModuleBuilder GetMethod name str 169 return MyMethodInfo Invoke null ObjArray Parameter 调 用 方 法 并 返 回 其 值 170 171 172 private void button1 Click object sender EventArgs e 173 174 175 DLD newDLL new DLD 176 newDLL LoadFun E test Csharp调 用 CIPP Csharp调 用 CIPP Dll l dll Init 177 Stringbuilder类 是 直 接 用 于 字 符 串 操 作 的 类 178 StringBuilder MyStringBuilder new StringBuilder Hello World 179 object是 所 有 D类 得 基 类 可 以 将 任 何 类 型 的 值 赋3给 object类 型 的 变 量 180 object obj new object MyStringBuilder 181 Type ty new Type typeof StringBuilder 通 过ytype类 可 以 访 问 任 意 a数 y据Y类 型 信 息 182 ModePass mode new ModePass ModePass ByValue 183 Type Type Return typeof StringBuilder 获 取 类 型 184 185 StringBuilder j StringBuilder newDLL Invoke obj ty mode Type Return Init 186 187 188 189 newDLL LoadFun E test Csha
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美术素材考试题及答案
- 商业楼宇中央空调改造工程协议
- 市场推广制作与执行合同书
- 在线服务隐私保护合同协议书
- 金融投资产品开发协议
- 贵州国企招聘2025贵州磷化(集团)有限责任公司招聘139人笔试参考题库附带答案详解
- 2025黑龙江中铁特货物流股份有限公司招聘75人笔试参考题库附带答案详解
- 2025广东储能产业发展有限公司招聘17人笔试参考题库附带答案详解
- 2025年甘肃人力委托招聘兰州地铁安检人员笔试参考题库附带答案详解
- 赠友送别类试题及答案
- 老年人脊椎疾病的预防和康复
- 大学物理课件57波尔共振实验
- 2023年工程师pe年终总结及年后展望
- 中国环境保护徽
- 眩晕护理完整
- 麦凯66表格(完全版)
- 竣工资料移交清单
- 作业指导书露天矿山作业指导书
- 家庭照护员题库
- 人教版七年级数学上册第三章《数学活动》名师课件
- 作文-曼娜回忆录全文小说
评论
0/150
提交评论