2005年10月
在VC.Net中使用默认设置/clr编译时,一个托管函数会产生两个入口点,一个是托管的,供托管代码调用,另外一个是非托管的,供非托管代码调用。但是函数地址,特别是虚函数指针只能有一个值,所以需要有一个默认的入口。
非托管入口点可能是所有调用的默认入口(在 Visual Studio .NET2003 中,编译器总是会选择非托管入口,但是在Visual Studio 2005中,如果参数或者返回值中包含托管类型,那么编译器会选择托管入口),而另外一个只是使用托管C++中的互操作功能对默认入口的调用。在一个托管函数被另一个托管函数调用的时候,这可能会造成不必要的托管/非托管上下文切换和参数/返回值的复制。如果函数不会被非托管代码使用指针调用,那么可以在声明函数时用VC2005新增的__clrcall修饰符阻止编译器生成两个入口。
现在用简单的冒泡排序算法来比较一下使用__clrcall之后的性能改善程度。
using namespace System;
#define ARRAY_SIZE 1000
struct bubbleBase
{
int value;
阅读全文>
发表于 @ 2005年10月08日 21:53:00|评论(loading...)|编辑
个人觉得这次MVP峰会最大的进步就是技术相关的Session数量大大增加,按照MVP专长来分类;而不像上次那样按主题分类。我只需要在VC产品组的日程里面选择就可以了,而不是像上回那样不得不去听移动开发。当然这回也有MVP不去参加VC的Session,跑去听IE和移动开发。内容方面也比上次活泼很多,Don Box还是那么幽默,比尔·盖茨也有搞笑的演出,不过他看起来比去年七月份在北京的时候老多了。
一些可能有人会感兴趣的技术信息
新的产品开发合作网站http://connect.microsoft.com/。在这里可以申请参与新产品的测试。
软件开发者可以使用Windows错误报告机制(Windows Error Reporting,简称WER,https://winqual.microsoft.com/parentorgs.asp)来获得反馈。
有人正在开发把VC项目转化成MSBuild的XML格式的工具 (
http://blogs.msdn.com/clichten/archive/2005/06/07/Building_VC_projects_with_msbu阅读全文>
发表于 @ 2005年10月08日 21:50:00|评论(loading...)|编辑
目前版本的VC2005测试版中,default关键字不仅用于指定类级别的索引器,而且也用于访问默认属性。但是奇怪的是,默认属性的原名不能访问了,也就是说,如果要把下面的代码段从托管C++移植到VC2005附带的C++/CLI,不仅需要更改指针的类型,而且要把属性的名称更改为default:
//[System::Reflection::DefaultMemberAttribute("Fields")] interface _Recordset
//托管C++语法
//extern _Recordset* results;
Fields* ResultFields=results->Fields;
//C++/CLI语法
//extern _Recordset^ results;
Fields^ ResultFields=results->default;
如果继续使用原来名字来访问属性的话,会报告编译错误:
Fields^ ResultFields=results->Fields;//C3293: 'Fields': use 'default' t阅读全文>
发表于 @ 2005年10月08日 21:47:00|评论(loading...)|编辑
使用USB存储或者软盘可以在机房和家里的计算机之间传输数据,但是在可以访问因特网的时候,在线存储是更加快捷和便宜的替代方案。典型的在线存储包含MSN 上的“我的网站”、FTP服务,以及基于网页的存储空间。
原文:http://cn.geocities.com/sheng_jiang/accessdocumentsfrominternet.doc (英文)
全文阅读:http://spaces.msn.com/members/jiangsheng/Blog/cns!1pVUmC6mid-3zVpLZNQTgtuw!199.entry (英文)阅读全文>
发表于 @ 2005年10月08日 21:44:00|评论(loading...)|编辑