什么是.NET Compact Framework
基于.NET Compact Framework开发的程序可以叫做托管程序英文叫做Managed code。所谓Managed code就是使用C#,VB.NET语言来编写代码使用.NET Compact Framework来开发编译成平台无关的中间语言(Intermediate Lanuage, IL)的文件的程序。基于.NET Compact Framework开发的程序在编写的时候会使用到.NET Compact Framework 基础类库(.NET Compact Framework Base Class Libraries, BCL) BCL为应用程序提供API。托管程序在运行的时候会使用到运行时执行引擎(run-time Execution Engine, EE), BCL和EE统称为Common Language Runtime (CLR)。当托管程序首次执行的时候CLR会把IL文件编译成相关平台的binary文件(可执行文件)。这个过程叫做Just-In-Time (JIT) compilation。由于有了这一个过程所以所有托管代码都依赖于CLR因此需要运行托管代码的设备必须安装 .NET Compact Framework。图来自于Windows Embedded CE 6.0 Fundamentals Chapter 9.通俗化Native Code vs. Managed Code上面讲述了一堆理论的东西下面使用一个通俗但不是很贴切的例子讲述Native和ManagedNative翻译成原生其实有地道的与生俱来的意思例如你天生说普通话那么可以说你是Mandarin Native Speaker。也就是与生俱来说普通话地地道道的普通话。如果你要做一些语言相关的产品进行销售如果你在销售产品之前把之翻译成各个语言例如在国内销售翻译成中文在美国翻译成英文在日本翻译成日文这好比你使用Native Code来开发在编译时已经为各个硬件平台生成原生的机器代码。但是Managed(托管)代码就好比世界语世界上没有那个民族和地区天生就说世界语但是你使用世界语来销售你的产品。针对每个不同国家和地区你附送一个及时翻译机这个翻译机会在用户使用的时候把世界语翻译成当地原生语言。这就好比基于.NET Compact Framework开发的代码需要CLR来翻译执行。这里注意不同硬件平台CLR是不一样的他们功能都是把IL编译成Native的机器码但是各个平台的机器码不一样所以.NET Compact Framework也不一样。.NET Compact Framework帮你处理了平台差异性因此.NET Compact Framework的程序是跨平台的就像世界语加上翻译机那样基于.NET Compact Framework编写的代码可以支持任何平台前提是微软为具体平台实现CLR。例如大家都知道Yahoo其实世界上有一种快要消失的语言就叫做Yahoo如果你做一个世界语到Yahoo语的翻译机那么你的产品可以不做任何修改就卖到讲Yahoo语的地方了。理论讲Native Code vs. Managed CodeNative CodeManaged Code编译成平台相关的机器码编译成IL(Intermediate Language)为各个不同设备编译不同版本的执行文件一次编译各种设备到处运行不需要其他框架支持相对于.NET Compact Framework来说需要CLR支持也就是需要安装.NET Compact Framework Rumtime可以最大限度的访问系统提供的API和服务只能访问.NET Compact Framework 提供的服务例如WIFI和Bluetooth.NET Compact Framework 的BCL不提供支持所以如果只是使用.NET Compact Framework 是不能进行WIFI和Bluetooth的开发的。由于有上述的限制性所以微软提供P/Invoke来访问平台相关的API和COM。可以使用MFCATLWTLSTL等库进行开发可以使用.NET Compact Framework 的BCL进行开发如何选择Native Code和Managed Code了解了Native Code 和 Managed Code的异同可以根据其特点和相应的需求进行选择。没有绝对的好坏所以才存在两个平台同时存在的现状。Native Code开发速度相对慢一些因为没有.NET Compact Framework 的Base Class Libraries的支持。BCL为开发者做了大量的封装例如Garbage CollectionWindows formWeb Service等等。基于BCL开发者可以专注于业务的开发。所以使用.NET Compact Framework一般来说可以节省不少开发时间。时至今日库对语言的影响越来越多如果没有RoRRuby可能还是一个籍籍无名的日本方言。C之父BjarneStroustrup说C的扩展更多的在STL的扩展通过STL来支持新特性以此C从语法上一直没有大变化但是由于STL的不断扩展而不断带来新的活力。可见库对一个语言和开发人员的重要性。在这方面.NET Compact Framework 胜出但是Native C还是可以通过MFCATLWTLSTL来补救。我本人十分喜欢使用WTL处理界面和大量使用STL关于WTL可以参考Windows Mobile和Wince(Windows Embedded CE)下的WTL(Windows Template Library)开发Windows Mobile 和 Wince(Windows Embedded CE) 下的 WTL(Windows Template Library) 界面(UI)开发Windows Mobile和Wince下使用WTL进行Windows Media Player开发关于在今日插件使用WTL的问题Windows Mobile下使用Native C(WTL, MFC, Win32)开发如何为对话框加入菜单Windows Mobile下如何去掉WTL对话框CStdDialogImpl的OK按钮在Windows Mobile下使用WTL进行Native C开发如何显示等待图标在Windows Mobile和Wince(Windows Embedded CE)下进行WTL开发如何加入超链接(HyperLink)但是Native Code执行速度相对快因为基于.NET Compact Framework 的代码有JIT的过程第一次执行需要把IL编译到Native机器码而Native Code本身就是机器码所以Native Code快很多。同时Native Code使用的memory footprint也少很多很多Native Code使用的footprint只是和你编写的代码分配内存有关。但是基于.NET Compact Framework 的代码尽管一个几乎没有任何功能的程序启动的时候也需要1到2M的内存。这些内存用于处理Garbage Collection等用途。Native Code和Managed Code存在一个可控性的gap.NET Compact Framework 是.NET Framework的精装版封装了一部分.NET Framework的功能但是不完全包含.NET Framework的所有功能。Native Code具有完全访问系统API和服务平台API的能力而.NET Framework不完全具备.NET Compact Framework 就更加不具备所以从系统可操控性来说Native Code和Managed Code存在一个gap这个gap是指有些功能Native Code可以做但是Managed Code却无法实现的功能例如WIFIBluetooth。要在.NET Compact Framework 实现这些功能必须通过P/Invoke来实现关于P/Invoke可以参考一下.NET Compact Framework 下Win32 API P/Invoke 的使用开发P/Invoke的工具与Website如何在Windows Mobile下使用Native C动态加载DLLWindows Mobile和Wince(Windows Embedded CE)下如何封装Native DLL提供给.NET Compact Framework进行调用Windows Mobile和Wince(Windows Embedded CE)下封装Native DLL进一步探讨在Windows Mobile和Wince(Windows Embedded CE)下封装Native DLL的回调函数由于这个可控性的gap的存在所以出现了OpenNETCF的Smart Device Framework32feet.net等库这些库为基于.NET Compact Framework的程序封装了P/Invoke的调用这样减少了gap的存在。32feet.net可以参考 基于32feet.net对Broadcom(Widcomm) stack蓝牙(Bluetooth)设备开发Windows Mobile与PC程序 等系列文章。当然微软也不断的在填补这个gap.NET Compact Framework的不断升级这个gap越来越小了例如.NET Compact Framework 1.0没有串口操作但是在.NET Compact Framework 2.0已经加上。可是.NET Compact Framework的rumtime就越来越大同时启动也越来越慢任何都是均衡移动设备受到CPU速度和内存的限制.NET Compact Framework 并不是加入越多功能越好。过犹不及中国人常说的。Balabala...说那么多还是没有说到底如何选择其实是trade-off(均衡)没有绝对真理还是根据具体需求结合上述Native Code和Managed Code的特点来选择。我自己的经验如果速度要求快内存要求少的核心模块都是使用Native C一般包括无界面纯数据处理的程序和完全自定义界面的GDI程序其他模块都用.NET Compact Framework。如果一个模块需要大量使用P/Invoke也是需要考虑使用Native C来代替.NET Compact Framework的。目前觉得选择还是OK的。

相关新闻

LangChain FewShotPromptTemplate少样本应用实战

LangChain FewShotPromptTemplate少样本应用实战

里有个容易踩的坑:创建 FewShotPromptTemplate 的时候,examples 和 example_selector 这两个参数是互斥的,必须填其中一个,不然代码直接报错。绝大多数情况下,我们直接用 examples 参数把准备好的示例数据传进去就行。…

2026/7/6 4:02:14 阅读更多 →
PowerShell 路径规则详解:从基础到高级

PowerShell 路径规则详解:从基础到高级

1. 引言在 Windows 系统管理和自动化脚本编写中,PowerShell 是功能强大的工具。无论是访问文件、加载模块,还是执行脚本,都离不开对路径的正确理解和处理。PowerShell 的路径规则与传统的 CMD 有所不同,它更灵活,但也更…

2026/7/6 3:56:12 阅读更多 →
你的前端代码打包后究竟经历了什么?

你的前端代码打包后究竟经历了什么?

打包命令执行的一瞬间,构建工具并不会立刻编译代码,第一步永远是读取并整合所有配置规则。构建工具配置读取: 以 Vite 为例,工具会自动查找项目根目录 vite.config.js,读取入口文件、输出目录、打包策略、公共路径等核…

2026/7/6 3:50:11 阅读更多 →

最新新闻

QLVideo:让Mac视频管理更高效的预览增强工具

QLVideo:让Mac视频管理更高效的预览增强工具

QLVideo:让Mac视频管理更高效的预览增强工具 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. 项目地址: https://gitcode.com/gh_…

2026/7/6 4:48:24 阅读更多 →
Jadx 1.5.2:安卓反编译工具的终极进化,Java代码还原更智能

Jadx 1.5.2:安卓反编译工具的终极进化,Java代码还原更智能

Jadx 1.5.2:安卓反编译工具的终极进化,Java代码还原更智能 【免费下载链接】jadx Dex to Java decompiler 项目地址: https://gitcode.com/gh_mirrors/ja/jadx Jadx是一款功能强大的安卓应用反编译工具,能够将APK、DEX等安卓应用文件转…

2026/7/6 4:48:24 阅读更多 →
FinalBurn Neo:打造完美复古街机游戏体验的终极指南

FinalBurn Neo:打造完美复古街机游戏体验的终极指南

FinalBurn Neo:打造完美复古街机游戏体验的终极指南 【免费下载链接】FBNeo FinalBurn Neo - We are Team FBNeo. 项目地址: https://gitcode.com/gh_mirrors/fb/FBNeo FinalBurn Neo(简称FBNeo)是一款开源的街机游戏模拟器&#xff0…

2026/7/6 4:44:23 阅读更多 →
3个关键问题:如何通过WSC API安全管理Windows Defender?

3个关键问题:如何通过WSC API安全管理Windows Defender?

3个关键问题:如何通过WSC API安全管理Windows Defender? 【免费下载链接】no-defender A slightly more fun way to disable windows defender firewall. (through the WSC api) 项目地址: https://gitcode.com/GitHub_Trending/no/no-defender …

2026/7/6 4:44:23 阅读更多 →
珀斯与袋鼠岛之旅:波浪岩与野生海鲜市场探访

珀斯与袋鼠岛之旅:波浪岩与野生海鲜市场探访

珀斯与袋鼠岛之旅:波浪岩与野生海鲜市场探访从西澳大利亚州的首府珀斯出发,向东驱车约340公里,可抵达海登附近的波浪岩。这块巨大的花岗岩体高约15米,长度约110米,其岩石表面因长期的风化与水蚀作用,形成了…

2026/7/6 4:42:23 阅读更多 →
叶兴阳双语音标,英语发音工具断层级天花板

叶兴阳双语音标,英语发音工具断层级天花板

功能向实测评价:叶兴阳双语音标,英语发音工具断层级天花板 深耕英语学习多年,试过市面各类音标教辅、发音软件、双语读物,唯有叶兴阳双语音标在功能性上做到全方位无短板,每一项核心功能都精准戳中自学、教学、精读全场…

2026/7/6 4:38:22 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻