2017年9月14日12时3分 DEV349 Visual C 无缝集成,无限潜力 李建忠 微软特约讲师 上海祝成科技

Slides:



Advertisements
Similar presentations
泛舆情管理平台 ——助力媒体业务创新 新模式 新格局 创新盈利增长点 2/26/2017 1:59 AM 屈伟: 创始人,总裁
Advertisements

中国银行业前置端操作系统移植研究.
3/3/ :01 PM © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered.
请点击以下链接下载WinHEC的演讲材料
借助公有云实现游戏的弹性运营 Shaun Fang (方兴) Azure开发技术顾问
我国石化行业提升式发展措施 白颐 石油和化学工业规划院.
吴峻 软件设计工程师组长 Exchange Server 微软有限公司
王书贵 资深分析师 CCW Research 计世资讯
深市协助执法及证券查询业务介绍 客户服务部 China Securities Depository
Database Architecture, not only DBA
抱怨處理技巧 高雄捷運公司 公共事務處 胡宜萍 安全 ‧ 便捷 ‧舒適 ‧ 可靠
请点击以下链接下载WinHEC的演讲材料
1. 设定愿景,确定业务场景 Microsoft Corporation
金融信息安全人才培养的思考与实践 中央财经大学 朱建明 2012年11月24日.
广东省广州市花都区教育局教研室 汤少冰 优化评估方式, 促进中学英语的教与学 广东省广州市花都区教育局教研室 汤少冰
張書源 Microsoft MVP MCT 趨勢科技 技術經理 網酷科技 資深顧問 集英信誠 資深顧問
Office 2013 全新功能介紹 台灣微軟 Office 大使 楊承恩 Marcus Microsoft Office
——打造科技金融升级版 中国建设银行顺德分行 2015年6月.
四川省集体林权流转平台 中国西部林权交易网
全国信息技术标准化技术委员会 (SAC/TC28)工作交流
Windows 10 混合现实 Mingfei Yan 高级项目经理
第一章 認識Visual C 環境架構 1-1 認識Visual C Visual Studio 概觀
DEV323 .NET架构:全球化思想! 定制各种文化及国际数据
MBL 340 Tablet PC SDK:在您的应用程序中使用数字墨水
BizTalk Server 2004.
解振宇 客户技术经理 客户售前技术部 微软中国有限公司广州办事处
11/17/2018 5:15 PM 病毒,间谍软件最新趋势 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes.
Mobile & Embedded DevCon 2005 朱敏博士 微软有限公司
Microsoft Office SharePoint Server 2007 事件追蹤與專案管理
MSG 321 统一消息架构和PBX集成.
利用最新Hyper-V Replica 功能達成Hyper-V 災難備援機制
BizTalk Server 2004.
互聯網安全資訊 助您達至更安全的網上體驗.
MSG 330 Exchange服务器性能调节技巧
服務啟用、導入流程、 郵件移轉步驟簡介 Microsoft Office 12/2/2018
OFC351 利用Office System开发复杂的商务解决方案 架构、模式、场景
MBL 325 开发跨平台的 Windows Mobile应用程序
MBL 327 Windows Mobile开发中的异构系统集成
BizTalk Server 2004.
构建 Windows TV Tuner 产业 生态环境的重要观点
使徒行傳 21:17-23章「保羅的見證(一)」 引言 預言保羅為主的名受許多的苦難的實現
SVR 352 扩展Windows Server 终端服务在企业中的应用
教师课堂教学能力提升培训 ---“互联网+教育”考勤小测验 Plickers 洛阳理工学院
Microsoft SQL Server 2008 報表服務_設計
OFC321 InfoPath在企业解决方案中应用的最佳实践
SQL Server Mobile 2005 程序开发(三)
请点击以下链接下载WinHEC的演讲材料
呂政周 精誠恆逸教育訓練處 資深講師 Windows PowerShell 呂政周 精誠恆逸教育訓練處 資深講師
可愛的鍬形蟲 五年四班2.
4/30/2019 7:40 AM 約翰福音 15:9;17:20-23 加拉太書 6:1-2 © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product.
DEV 343 VS2005超快速开发方案/EEP2006控件包.
5/4/2019 4:42 PM © 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered.
DEV342 Visual Basic 2005: 应用程序框架 和高级语言特性
微軟資安稽核解決方案 System Center 2012
耿志刚 应用整合产品技术专家 专业解决方案部 微软中国
使徒行傳 24-26章 [ 保羅的見證(二)] 徒9:15 “  主 對 亞 拿 尼 亞 說 、 你 只 管 去 . 他 是 我 所 揀 選 的 器 皿 、 要 在 外 邦 人 和 君 王 並 以 色 列 人 面 前 、 宣 揚 我 的 名 。 ”]
TechEd /6/ :36 PM © 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks.
Windows 徽标计划工具:综述与发展趋势
5/5/2019 7:06 PM 两跨框架梁截面配筋图的绘制 © 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may.
SQL Server Mobile 2005 程序开发(二)
MBL302 设计Windows Mobile应用程序的用户界面
DEV 343 VS2005超快速开发方案/EEP2006控件包.
蔺华 ISV开发合作经理 平台及开发技术部 微软(中国)有限公司
安裝 Visual C Express Edition
MSG 361 如何从Exchange 5.5迁移 胡义 咨询顾问 上海星移软件有限公司 2019年7月31日8时9分
Bob Combs Lead Program Manager Microsoft Corporation
Ron Jacobs 高级技术专员 Microsoft
強化 Windows 平台 唐任威 資深講師.
高擴充高穩定高安全 企業級資料管理平台 Report Builder概論 錢曉明 資策會 資深講師 台灣微軟 資深講師.
Windows Workflow Foundation CON 230
Presentation transcript:

DEV349 Visual C++ 2005 无缝集成,无限潜力 2017年9月14日12时3分 DEV349 Visual C++ 2005 无缝集成,无限潜力 李建忠 微软特约讲师 上海祝成科技 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

VC++ 2005 集成潜力 VC++ 2005的内核语言为C++/CLI,是目前.NET平台上能力最接近IL代码的系统级语言 2017年9月14日12时3分 VC++ 2005 集成潜力 VC++ 2005的内核语言为C++/CLI,是目前.NET平台上能力最接近IL代码的系统级语言 无缝集成本地代码与托管代码,支持混合程序集 同时支持CLR泛型与ISO-C++模板 支持多种框架类库,Win32 , MFC , COM, STL, ATL, .NET 框架类库 高度优化的代码,是所有.NET语言中优化程度最高的代码 C++/CLI不是ISO-C++与C#的简单相加,而是一门全新的语言! © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

C++  CLR= Visual C++ 2005 C++ 技术特点: Visual C++ 2005 CLR 技术特点: 2017年9月14日12时3分 C++  CLR= Visual C++ 2005 C++ 技术特点: 静态化的对象模型 对象空间和生成文件的高度优化 确定性内存收集 特定平台目标编译 强大的静态模板 灵活的指针与引用 强大的STL, MFC, ATL CLR 技术特点: 动态化的组件模型 丰富的元数据 自动垃圾收集 JIT编译,跨平台 运行时泛型 安全的对象句柄,数组,委托(函数指针) 强大的.NET 框架类库 Visual C++ 2005 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

C++/CLI集成技术图谱 技术 支持 特点 源代码集成 对象模型集成 函数库模块集成 COM组件集成 泛型与模板集成 2017年9月14日12时3分 C++/CLI集成技术图谱 技术 支持 特点 源代码集成 C++ Interop 只有C++/CLI支持 效率高,绝大部分本地代码被编译为IL代码 对象模型集成 效率高,绝大部分本地代码被编译为IL代码,但目前不够完善 函数库模块集成 P/Invoke .NET框架支持,可用于所有.NET语言 非托管模块单独执行,需要类型Marshal COM组件集成 COM互操作 COM组件单独执行,需要类型Marshal 泛型与模板集成 CLR泛型,C++模板 泛型只能应用于托管类型,模板可应用于托管类型与本地类型,STL.NET 大型框架集成, STL.NET! MFC.NET? Boost.NET ? © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

2017年9月14日12时3分 使用C++ Interop集成源代码 使用C++ Interop,可以将ISO-C++代码单独编译为托管代码,也可以将ISO-C++与托管的C++/CLI代码放在同一个文件中编译,互相之间进行无缝的访问。 C++ Interop 技术保证了所有的ISO-C++代码经过cl/clr编译后行为保持不变。 绝大多数ISO-C++代码编译后将得到托管代码,即IL代码。部分不能编译为IL代码的采用P/Invoke调用实现,生成文件为一个包含非托管机器指令和IL指令的混合程序集。 C++ Interop会透明地处理其中的类型Marshal,是最为灵活和高效的互操作方案。 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

混合程序集 本地空间 CLR空间 代码 数据 本地机器码 IL代码 混合程序集 本地数据/类型 CLR数据/类型 2017年9月14日12时3分 混合程序集 本地空间 CLR空间 代码 数据 本地机器码 IL代码 混合程序集 本地数据/类型 CLR数据/类型 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

源代码集成Code Example 2017年9月14日12时3分 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

集成ISO-C++与CLI对象模型 ISO-C++对象模型和CLI对象模型集成是C++/CLI集成技术中最为复杂,也最彰显潜力的地方。 2017年9月14日12时3分 集成ISO-C++与CLI对象模型 ISO-C++对象模型和CLI对象模型集成是C++/CLI集成技术中最为复杂,也最彰显潜力的地方。 C++/CLI在对象模型集成过程中几个突出的问题 C++/CLI只支持对托管引用类型进行垃圾收集服务,不支持对ISO-C++本地类型的垃圾收集服务。 垃圾收集导致了托管对象地址的不稳定,与ISO-C++本地对象稳定的地址形成鲜明对比。 C++/CLI中的托管对象的内存布局也和本地对象的内存布局有明显的不同。 C++/CLI中类型的多态机制(虚拟)也不同于本地类型的多态机制。 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

2017年9月14日12时3分 对象模型结构的集成(1) 在托管对象中包含本地对象的指针 ref class ManagedClass{ string* pText; }; 在本地对象中包含托管对象的指针 class NativeClass { gcroot<String^> pText; }; 在托管对象中包含本地对象的指针,或者在本地对象中包含托管对象的指针,从而可“连通”托管世界和本地世界,实现两个代码库的相互复用。 在这个集成过程中,CLR垃圾收集只负责托管对象的收集工作,本地对象的回收工作仍由程序员自己负责delete。 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

2017年9月14日12时3分 对象模型结构的集成(2)  在托管对象中包含本地对象 ref class ManagedClass{ string text; };  在本地对象中包含托管对象 class NativeClass{ String text; }; 在托管对象中包含本地对象,或者在本地对象中包含托管对象,相对于“包含指针”有相当技术难度,但成效与“包含指针”相差不大。 这两种集成技术在Visual C++ 2005中都尚未实现,但在Visual C++的未来版本中有望通过代理来实现。 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

2017年9月14日12时3分 对象模型结构的集成(3)  将本地对象放在托管堆中 string^ hText= gcnew string;  将托管对象放在本地堆中 String* pText = new String; 将本地对象放在托管堆中,或者将托管对象放在本地堆中,从而实现C++之父Bjarne Stroustrup所推崇的“可选的”垃圾收集,意义重大,但实现难度相当大。 这两种集成技术在Visual C++ 2005中都尚未实现,在Visual C++开发组中仍处于研究状态。 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

对象模型集成Code Example 2017年9月14日12时3分 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

P/Invoke 平台调用 P/Invoke支持在托管代码中调用特定平台(如Windows)模块(DLL)中的非托管函数。 2017年9月14日12时3分 P/Invoke 平台调用 [DllImport("User32.dll")] int MessageBoxA(int hWnd, String^ msg, String^ caption, int type); int main( ) { MessageBoxA(0, "Do you love C++/CLI?", "C++/CLI Interop", 0); } P/Invoke支持在托管代码中调用特定平台(如Windows)模块(DLL)中的非托管函数。 P/Invoke为.NET框架直接支持的平台互操作机制。适用于没有源代码而只有DLL文件的情况。 由于许多本地类型和托管类型的内存布局存在差异,P/Invoke需要对这些类型进行Marshal。 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

2017年9月14日12时3分 COM互操作 C++/CLI支持两种COM互操作:第一种为.NET 框架提供的Tlbimp.exe,适用绝大多数.NET语言;第二种为C++/CLI特有的COM互操作机制。 Tlbimp.exe需要将COM接口的所有成员导出到一个程序集wrapper中,其支持的类型也有限。 C++/CLI所特有的COM互操作机制支持所有的数据类型,并且透明处理其中的Marshal。 可以将COM组件直接封装在C++/CLI类型内,进行无缝访问,C++/CLI编译器会自动处理其中的转换工作 这些封装类被称为CRCW,CRCW不需要wrapper程序集,只需定义COM接口的头文件。 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

COM互操作Code Example 2017年9月14日12时3分 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

泛型与模板集成 C++/CLI支持三种泛型应用 C++/CLI所支持的泛型程序库 2017年9月14日12时3分 泛型与模板集成 C++/CLI支持三种泛型应用 在ISO-C++本地类型上应用模板(编译时泛型) 在CLI托管类型上应用模板(编译时泛型) 在CLI托管类型上应用CLI泛型(运行时泛型) C++/CLI所支持的泛型程序库 标准模板库 STL CLI标准模板库 STL.NET CLI泛型库 System::Collections::Generic C++模板采用基于“签名”的隐式约束,同时支持非类型参数、模板的模板参数、模板特化以及部分特化,具有极高的灵活性;而CLI泛型采用基于“基类+接口”的显式约束,丧失了很大的灵活性,难以实现一些高级的应用 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

C++/CLI集成展望: 大型应用程序框架集成 2017年9月14日12时3分 C++/CLI集成展望: 大型应用程序框架集成 C++/CLI集成 STL.NET ! STL C++/CLI集成 MFC.NET ? MFC C++/CLI集成 Boost Boost.NET ? © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.

社区资源 梦溪e谈:www.dreambrook.com 传说中的C++高端技术社区 MSDN 中国: Visual C++ 开发中心 blog.dreambrook.com/jzli 个人博客 comp.lang.c++.moderated msdn.microsoft.com/visualc blogs.msdn.com/slippman pluralsight.com/blogs/hsutter