南通快速建站公司馆陶网站建设价格

张小明 2026/1/19 22:11:55
南通快速建站公司,馆陶网站建设价格,免费秒开小游戏,营销策划公司行业榜单C#内存加载dll和EXE是不是差不多#xff0c;主要是EXE有入口点#xff1f;是的#xff01;在 C# 中#xff0c;内存加载 DLL 和 EXE#xff08;仅限 .NET 托管程序集#xff09;的核心逻辑几乎完全一致#xff0c;唯一的关键差异确实集中在「EXE 有入口点#xff08;En…C#内存加载dll和EXE是不是差不多主要是EXE有入口点是的在 C# 中内存加载 DLL 和 EXE仅限 .NET 托管程序集的核心逻辑几乎完全一致唯一的关键差异确实集中在「EXE 有入口点EntryPoint」但本质上二者都是 CLR 可加载的托管程序集加载和反射调用的底层规则完全相同。下面我们从「核心共性」「关键差异」「代码示例」三个维度讲清楚帮你彻底理解一、核心共性加载 DLL/EXE 完全一致无论加载的是 .NET DLL 还是 EXE只要是托管程序集内存加载的底层逻辑、反射调用方法的规则完全相同加载方式一致都通过Assembly.Load(byte[])从内存字节数组加载而非LoadFile/LoadFrom读文件避免磁盘依赖反射调用一致加载后都通过Type.GetMethod/MethodInfo.Invoke调用方法无论是否静态、有无参数 / 返回值依赖处理一致若程序集依赖其他 DLL/EXE都需通过AppDomain.CurrentDomain.AssemblyResolve事件处理内存加载依赖类型访问一致都能访问程序集中的公开类、方法、属性只要权限允许。简单说CLR 并不区分「DLL」和「EXE」扩展名只认「是否是符合 .NET 规范的托管程序集」—— EXE 只是「带入口点的 DLL」DLL 是「无入口点的 EXE」。二、关键差异仅 2 点核心是入口点维度.NET DLL.NET EXE入口点EntryPoint无默认入口点除非手动定义必有入口点Main方法可通过Assembly.EntryPoint获取编译 / 运行特性无法直接独立运行需宿主程序可直接双击运行CLR 自动调用入口点反射调用重点找「自定义业务方法」如DoWork()可调用「入口点Main」或「自定义业务方法」补充EXE 的入口点也可以是无参 / 有参、有返回值 / 无返回值如int Main(string[] args)和 DLL 自定义方法的调用规则完全一致。三、C# 代码示例对比 DLL/EXE 内存加载1. 通用内存加载方法DLL/EXE 共用csharpusing System; using System.Reflection; using System.IO; public static class AssemblyLoader { // 核心从字节数组加载托管程序集DLL/EXE 通用 public static Assembly LoadFromMemory(byte[] assemblyBytes) { // 内存加载不落地磁盘区别于 LoadFile/LoadFrom return Assembly.Load(assemblyBytes); } // 辅助从文件读取字节实际可从网络/加密存储获取 public static byte[] GetAssemblyBytes(string filePath) { return File.ReadAllBytes(filePath); } }2. 内存加载 DLL调用自定义方法假设 DLL 中有如下代码// 被加载的 DLL 代码 namespace MyDll { public class Calculator { // 自定义有返回值方法 public static int Add(int a, int b) { return a b; } } }内存加载并调用csharp运行public static void CallDllFromMemory() { try { // 1. 读取 DLL 字节内存加载核心 byte[] dllBytes AssemblyLoader.GetAssemblyBytes(C:\MyDll.dll); Assembly assembly AssemblyLoader.LoadFromMemory(dllBytes); // 2. 找 DLL 中的类型和方法重点自定义业务方法 Type calcType assembly.GetType(MyDll.Calculator); if (calcType null) throw new Exception(未找到 Calculator 类型); MethodInfo addMethod calcType.GetMethod(Add, BindingFlags.Public | BindingFlags.Static, null, new[] { typeof(int), typeof(int) }, null); // 3. 调用方法并获取返回值 object result addMethod.Invoke(null, new object[] { 100, 200 }); Console.WriteLine($DLL 方法返回值{result}); // 输出 300 } catch (Exception ex) { Console.WriteLine(DLL 调用失败 ex); } }3. 内存加载 EXE调用入口点 自定义方法假设 EXE 中有如下代码// 被加载的 EXE 代码 namespace MyExe { class Program { // EXE 入口点有参数、有返回值 static int Main(string[] args) { return args?.Length ?? -1; // 返回参数个数无参数返回 -1 } } // EXE 中的自定义公开方法和 DLL 一样可调用 public class ExeHelper { public static string GetInfo() { return EXE 自定义方法 DateTime.Now; } } }内存加载并调用public static void CallExeFromMemory() { try { // 1. 读取 EXE 字节和 DLL 加载逻辑完全一致 byte[] exeBytes AssemblyLoader.GetAssemblyBytes(C:\MyExe.exe); Assembly assembly AssemblyLoader.LoadFromMemory(exeBytes); // 场景1调用 EXE 入口点Main MethodInfo entryMethod assembly.EntryPoint; // 核心获取 EXE 入口点 if (entryMethod null) throw new Exception(未找到 EXE 入口点); // 调用入口点并获取返回值和 DLL 方法调用规则一致 object entryResult entryMethod.Invoke(null, new object[] { new string[] { param1, param2 } }); Console.WriteLine($EXE 入口点返回值{entryResult}); // 输出 2 // 场景2调用 EXE 自定义方法和 DLL 完全一致 Type helperType assembly.GetType(MyExe.ExeHelper); MethodInfo infoMethod helperType.GetMethod(GetInfo); object infoResult infoMethod.Invoke(null, null); Console.WriteLine(infoResult); // 输出 EXE 自定义方法2025-xx-xx... } catch (Exception ex) { Console.WriteLine(EXE 调用失败 ex); } }四、关键总结核心结论C# 内存加载托管 DLL/EXE 几乎无差异唯一区别是 EXE 多了「入口点Main」但调用入口点的逻辑和调用 DLL 自定义方法完全一致本质逻辑CLR 加载的是「托管程序集」扩展名DLL/EXE仅影响「是否可独立运行」不影响内存加载和反射调用注意事项仅适用于 .NET 托管程序集非托管 DLL/EXE 需用LoadLibrary/P/InvokeEXE 调用入口点时需匹配Main的参数 / 返回值类型如string[] args、int返回值依赖处理若 EXE/DLL 依赖其他程序集需通过AssemblyResolve事件内存加载依赖项。简单记EXE DLL 入口点内存加载和反射调用的核心逻辑完全复用。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

彩票网站维护会跑路吗网站营销推广应该怎么做

Sanic框架CLI参数解析异常深度解析与修复指南 【免费下载链接】sanic Accelerate your web app development | Build fast. Run fast. 项目地址: https://gitcode.com/gh_mirrors/sa/sanic Sanic作为Python生态中备受瞩目的异步Web框架,以其卓越的性能表现和…

张小明 2026/1/17 23:13:26 网站建设

长沙优化网站多少钱wordpress商城 淘宝客

数据库对比需结合场景需求(如事务、分析、高并发)、数据模型(关系型/非关系型)、特性差异(ACID、扩展性)等维度展开。以下是主流数据库的详细对比:一、核心分类与代表数据库先明确数据库的底层分…

张小明 2026/1/17 23:13:28 网站建设

网站建设 软文发布wordpress 数据库搜索功能

NoSleep防休眠工具终极指南:无需权限的Windows系统守护神器 【免费下载链接】NoSleep Lightweight Windows utility to prevent screen locking 项目地址: https://gitcode.com/gh_mirrors/nos/NoSleep 你是否经历过在线会议时电脑突然休眠导致连接中断&…

张小明 2026/1/17 23:13:27 网站建设

淘宝请人做网站被骗中国最著名的40个建筑

MeshCentral作为基于Web的远程监控与管理平台,为用户提供了跨平台远程控制能力。通过浏览器即可实现对各类网络设备的全面管理,支持Windows、Linux、macOS等多种操作系统环境,打造了集中化的设备管理体验。 【免费下载链接】MeshCentral A co…

张小明 2026/1/19 20:22:44 网站建设

凡科建站网站百竞网站建设

《FrameMaker格式复制与导入全攻略》 在处理文档时,我们常常需要从不同文档中获取各种格式,以实现文档的统一和规范。下面将详细介绍使用剪贴板复制格式以及使用“导入>格式…”命令的相关内容。 一、使用剪贴板复制格式 当你只需要从不同文档中获取一两种格式时,使用…

张小明 2026/1/17 23:13:28 网站建设

网站后台发邮件海外手表网站

英雄联盟回放分析神器:ROFL-Player 5大核心功能详解 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为无法深入分析英雄…

张小明 2026/1/17 23:13:29 网站建设