知识大全 C#实现动态调用Windows DLL
Posted 函数
篇首语:贪婪是最真实的贫穷,满足是最真实的财富。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#实现动态调用Windows DLL相关的知识,希望对你有一定的参考价值。
C#实现动态调用Windows DLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
部分代码来自于网络 废话不多说 上代码
调用方法
object obj = WinDllInvoke( Kernel dll Beep new object[] typeof(void));函数代码
[System Runtime InteropServices DllImport( kernel )] private static extern IntPtr LoadLibrary(string lpLibFileName); [System Runtime InteropServices DllImport( kernel )] private static extern IntPtr GetProcAddress(IntPtr hModule string lpProcName); [System Runtime InteropServices DllImport( kernel )] private static extern IntPtr FreeLibrary(IntPtr hLibModule); /// /// 动态调用Windows DLL /// /// Dll文件名 /// 待调用的函数名 /// 函数参数 /// 返回值 /// 调用结果 private static object WinDllInvoke(string fileName string funName object[] objParams Type returnType) IntPtr libHandle = IntPtr Zero; try //获取函数地址 libHandle = LoadLibrary(fileName); if (libHandle == IntPtr Zero) return null; IntPtr procAddres = GetProcAddress(libHandle funName); if (procAddres == IntPtr Zero) return null; //获取参数类型 Type[] paramTypes = new Type[objParams Length]; for (int i = ; i < objParams Length; ++i) paramTypes[i] = objParams[i] GetType(); //构建调用方法模型 AssemblyName asembyName = new AssemblyName(); asembyName Name = WinDllInvoke_Assembly ; AssemblyBuilder asembyBuilder = AppDomain CurrentDomain DefineDynamicAssembly(asembyName AssemblyBuilderAccess Run); ModuleBuilder moduleBuilder = asembyBuilder DefineDynamicModule( WinDllInvoke ); MethodBuilder methodBuilder = moduleBuilder DefineGlobalMethod( InvokeFun MethodAttributes Public | MethodAttributes Static returnType paramTypes); //获取一个 ILGenerator 用于发送所需的 IL ILGenerator IL = methodBuilder GetILGenerator(); for (int j = ; j < paramTypes Length; ++j) //将参数压入堆栈 if (paramTypes[j] IsValueType) IL Emit(OpCodes Ldarg j); //By Value else IL Emit(OpCodes Ldarga j); //By Addrsss // 判断处理器类型 if (IntPtr Size == ) IL Emit(OpCodes Ldc_I procAddres ToInt ()); else if (IntPtr Size == ) IL Emit(OpCodes Ldc_I procAddres ToInt ()); else throw new PlatformNotSupportedException( 不好意思
cha138/Article/program/net/201311/12149相关参考
asp调用C#编写的DLL发送邮件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一直想写一个a
C#使用Dllmport来调用dephi的dll 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n
怎样在MFC中调用C#编写的DLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一使用/clr
利用JNative实现Java调用dll动态库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 由
VB动态调用自己的ActiveXDLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
C#中动态加载和卸载DLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在C++中加载和卸载D
C#调用WindowsAPI函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Api函数是构筑
VisualC#中调用Windows服务初探 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Wi
C#中调用WindowsAPI的要点 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在NetFr
C#中调用WindowsAPI的技术要点 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在Net