4/25/2005

请勿向第三方公开你的个人密码

Please don't show your password to 3rd party.

一直以来我都持续收到一些加入在线手机社区http://www.sms.ac的邀请,因为我没有手机(要找我的人注意:我醒着的话一般都挂在MSN上),所以总是看过就算。但是今天收到了来自一个不是很熟的朋友的加入这个社区和另外一个社区http://www.bebo.com的邀请,所以上网搜索了一下一些个人BLOG对这两个网站的引用。搜索的结果触目惊心。
这些网站显然都要求用户输入邮箱和邮箱的密码,同时使用邮箱中保存的联系人信息来邀请用户的联系人加入。但是,向第三方公开你的密码意味着公开你的全部邮件、联系人的家庭地址、电话等信息。这可能不是你的朋友愿意看到的情形。

密码是私有的,并且从不应该向第三方公开。任何在注册时要求现存密码的服务都是可疑的,特别在询问你的邮箱密码而没有警告用户这样可能造成的危险的情况下。如果某个网站询问你的hotmail账户和密码,那么几乎可以肯定这是个没有和微软合作的网站,因为真正和微软合作的商业网站应该会使用.Net Passport来和微软共享用户注册信息,例如http://www.match.com。

如果你收到了注册某个网站的邀请,首先搜索因特网上对这个网站的引用以确定是否值得向这个网站公开你的个人信息。如果有必要,你可以新建一个电子邮件和密码组合来参与在线社区。


参考
http://hownow.brownpau.com/archives/2005/02/spam_from_smsac
http://www.jaffacake.net/BensBlog.nsf/dx/bebo.com---update

顺便说一下,微软发布了Windows XP和Windows 2003的64位版本(Microsoft Windows XP Professional x64 Edition )Windows Server 2003 x64 Editions。

4/21/2005

Visual C++ 2005的版本区别

经常看见有些人问Visual C++ 2005里面为什么没有了MFC。实际上,MFC只是在目前免费下载测试版的Express版本里面没有,在其它的版本里面都有——但是一般都是要付钱的。具体的各个版本的比较可以参见参考部分的链接。不过对于用VC来学习.Net开发的程序员来说,Express版就足够了。

小道消息:

CFileDialog::SetControlText的BUG在Beta2里面已经修正。
Visual C++ 2005不再支持单线程的CRT库(LIBC.lib)
参考

http://msdn2.microsoft.com/library/hs24szh9(en-us,vs.80).aspx

http://msdn2.microsoft.com/library/y8bt6w34(en-us,vs.80).aspx

4/19/2005

Visual C++ 2005 Beta 2中的变动

stdcli::language名称空间被取消,代之以cli名称空间。

MFC对.Net控件的事件支持宏VENT_DELEGATE_ENTRY的参数类型变化:例如EVENT_DELEGATE_ENTRY( eventHandler, Object, EventArgs )改为EVENT_DELEGATE_ENTRY( eventHandler, Object^, EventArgs^ )

编译器更加友好了,例如这个编译错误消息:error C3824: 'cli::pin_ptr': this type cannot appear in this context (function parameter, return type, or a static member)
这回总算可以不安装J#的支持包了……

小道消息:以下功能预计不会存在于Visual Studio 2005的第一个发布中:

Visual C++ 对Class Designer(http://blogs.msdn.com/classdesigner/)的支持(http://blogs.msdn.com/classdesigner/archive/2005/03/04/384764.aspx)
完整的托管支持库(marshal_as)

VC的自动化向导的BUG

VC6

BUG: ClassWizard Omits Methods with BYTE or BYTE* As Parameters (http://support.microsoft.com/kb/q241862/)
BUG: VTS_UI1 and VTS_PUI1 are Defined Incorrectly in AfxDisp.h (http://support.microsoft.com/kb/242588/)
FIX: Method with BOOL* Parameter Type Overwriting Memory in Visual Basic (http://support.microsoft.com/kb/199315/)
VC.Net 2003:

VC6的向导产生的封装类对VARIANT类型的属性的处理是传地址
void CAxCtrlAV::SetFoo(const VARIANT& propVal)
{
SetProperty(0x1, VT_VARIANT, &propVal);
}
VC7的向导产生的封装类对VARIANT类型的属性的处理是传值
void CAxCtrlAV::SetFoo(VARIANT propVal)
{
SetProperty(0x1, VT_VARIANT, propVal);
}
因为VC7的va_list/va_start的 行为改为替换栈层次而不是实际上保存参数的地址,对属性的访问最终会在COleDispatchDriver::InvokeHelperV中导致程序崩溃。解决该问题的方法是手工将VC7的类向导产生的封装类的定义和实现更改为VC6风格的,或者不使用VARIANT做为属性的类型。

4/07/2005

在使用浏览器控件的程序中判断HTTP错误

在自动化浏览器控件提交表单之后,浏览器控件可能会在浏览超时时重定向到一个错误页面。有时需要用代码控制页面返回之后重新提交表单。

IE6.0之前的版本浏览器控件没有获得HTTP状态的接口。一个很依赖于网站设置的方法是,捕获TitleChange事件,在页面标题包含"找不到页面"或者"Page Not Found"之类的字符串时,认为浏览失败。另一个方法是处理BeforeNavigate2事件,用winhttp api单独和服务器连接,使用HttpQueryInfo来查询,相应参数是HTTP_QUERY_STATUS_CODE。在这之前,你可能要在打开URL时用INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS标志来防止服务器的重定向。

这种方法会造成每个页面被下载两次,一次由浏览器控件发起,一次由网址测试代码发起。两次下载有可能有不同的结果,所以这种方法也未必准确。

浏览器控件不支持IBindStatusCallback接口,也没有从浏览器控件获得IWinInetHttpInfo接口的已知方法。

InternetGetLastResponseInfo在找不到网页(404)时不会返回错误。

IE6.0版本的浏览器控件可以触发DWebBrowserEvents2::NavigateError事件来通知浏览错误及提供错误代码。但是,这个事件只在使用代码进行浏览之后触发一次。在用户点击链接触发浏览错误时不会触发这个事件。

参考

http://www.microsoft.com/mind/0796/protocol/protocol.asp

http://msdn.microsoft.com/workshop/browser/webbrowser/reference/ifaces/dwebbrowserevents2/navigateerror.asp