HABIT IS POWER

习惯就是力量

0%

一个诡异的问题:

WinRT多工程情况下,调用另一个DLL中的接口,构造那个类型的时候就会直接抛出异常,错误码为0x80040154,REGDB_E_CLASSNOTREG,注释是:Class not registered

最终在MSDN上找到相关的解答是:

Creating Windows Runtime Components in C# and Visual Basic

Visual Studio 11 Express for Windows Developer Preview fails to add classes to the app manifest if they don’t have default constructors.

This causes a “Class not registered” error at run time, when JavaScript code tries to instantiate the class. The workaround is to add a default constructor.

‘’’Important’’’

When you encounter this error, simply adding a default constructor to the class doesn’t fix the problem. Stop the debugger and then delete the AppXManifest.xml file from the Debug folder, forcing Visual Studio to regenerate the file and add the class. Alternatively, you can manually add the class to the extensions section of the manifest.

简要来说:

就是AppXManifest.xml这个文件编译时生成的有问题,没有把DLL中的类生成完整,导致另外的工程调用时无法识别;
手工添加上后就可以成功调用了。

问题

  1. 新建一个Windows Metro style的Project(Application/Grid Application/WinRT Component DLL……)
  2. #include <wrl.h>
  3. 编译,发现一堆错误,类似:
1
2
3
1>c:\program files (x86)\windows kits\8.0\include\winrt\inspectable.h(110): error C2872: 'TrustLevel' : ambiguous symbol
1> could be 'c:\program files (x86)\windows kits\8.0\include\winrt\inspectable.h(76) : TrustLevel'
1> or 'c:\program files (x86)\microsoft visual studio 11.0\vc\lib\platform.winmd : Platform::TrustLevel'

分析

  1. 错误原因很明显,两个命名空间下的类型定义冲突了
  2. 所以解决问题的方法其实就是二选一
  3. 我的方法是不用Platform这个命名空间下的类型定义,所以不要使用using namespace Platform,而是在需要的地方加上命名空间前缀,类似

Platform::TrustLevel

Project中带有App.xaml的解决方案

  1. 我这暂时无解,因为App.g.h中会自动帮你生成代码:using namespace Platform

Project中不带App.xaml的解决方案

  1. 这就就比较好办了,不要在文件头使用会导致C3872错误的using namespace
  2. WinRT Component DLL的Project还会自动生成一个using namespace Windows::Foundation,也会有类似的问题,去掉文件头的using namespace,在需要的地方单独加前缀就可以解决这个问题

说在前面

最准确的信息在深圳住房公积金中心网站,如果本文的说明或解释和公积金网站上的有出入,请以公积金中心网站为准。

网站的使用就不单独介绍了,官方网站一如既往的烂,要是访问过程中遇到莫名其妙的问题,大家要有点耐性。

和提取相关的指南其实应该是大家最关心的,本文其实就是对指南的一个“取后感”。

指南在这里:深圳公积金-网上办事-提取指南

租房提取

官方指南:支付自住住房租金提取业务办理指南(试行)

我的心得:

0、租房提取可以选择一个你自己最方便的银行进行,当然要是你的公积金银行卡的所属银行

1、租房提取一年可以提取两次,可以累积提取,暂时不缺钱的话可以以后一起提取

2、提取需要网上预约,先到网上登录,然后修改下网上的登录密码(这个相当于是激活网上账户,进行过一次就可以了),然后进行预约

3、提取需要事先激活公积金银行卡,最好事先到银行激活,取公积金的窗口是独立的,和激活银行卡的窗口不是同一个

4、需要带的材料:身份证、公积金银行卡

5、到预约的银行进行提取,5分钟之内搞定

异地购房提取

官方指南:异地购房提取业务办理指南(试行)

我的心得:

0、异地购房提取必须到公积金中心办事大厅才能提取,在福田,具体地址:深圳市住房公积金管理中心交通路线

1、异地购房提取只能提取一次,购房后两年内有效,以契税上的日期为准,如果你想取的最多就在契税上的日期推后两年的时间点之前去提取(会保留一个月的钱在卡里)

2、提取需要网上预约,先到网上登录,然后修改下网上的登录密码(这个相当于是激活网上账户,进行过一次就可以了),然后进行预约

3、提取需要事先激活公积金银行卡,公积金办事大厅应该是不能激活银行卡的,所以要实现去银行激活

4、没有按照配偶和未成年子女份额提取的(我的理解就是只提取自己的)需要带的材料:身份证、公积金银行卡、房产证、契税发票(复印什么的看自己方不方便,办事大厅那里也会帮你复印),每个家庭的情况不一样,需要按XXX份额提取的话,最好看下官方指南

5、到福田的公积金办事大厅提取,20分钟之内搞定

后记

我本来也是很没信心能从ZF手中把自己的钱给取了,但是情况所逼,再烂的网站,再难懂的条例我也要看下去,看明白,然后把自己的钱给取了。

事实证明:虽然麻烦点,但还是可以做到的。

我的租房提取是在招商银行进行的,招行的MM很热心,但是对业务不熟,导致效率很低,有问题她们也说的不是很清楚;

异地购房提取是在公积金中心办事大厅提取的,服务态度挺好,小伙子对业务很熟悉,问的问题都能马上解答清楚,稍微有点欣慰。

WinRT下异步操作很多,所以Lambda也很多,如果要让Lambda部分的函数递归如何实现?

这个需求其实在C++下会比较突出一点,因为C#和VB下是managed的代码,比较容易实现回调事件。

其实也是一个小的“奇技淫巧”,不见得是什么好东西:

缓存下这个Lambda表达式的地址:opRead->Completed = (Type sender){Lambda};

在op->Start();之前缓存下这个地址:m_handler = opRead->Completed;

然后你就可以在Lambda内部继续使用这个地址,于是乎递归达成。

我的sln下面有两个WinRT工程,一个是exe,一个是dll,exe动态链接dll,一切看上去都是那么的和谐,但运行起来却不是那么回事:

直接退出,返回错误码为0xC0000135

从MSDN上找到一个类似的例子:Metro style app links to static lib, 0xc0000135 on start up

看完之后,尝试把我的dll拷贝到System32目录下,再运行竟然可以了 :(

不过这事还没结束,这可不是我想要的结果,但由于时间问题,我只能先暂时搁置下这个问题,后面再来继续解决,待续……

2011/11/24 补充:

Metro style App调试的时候VS2011会自动帮你把exe部署到“容器”环境下,实际的目录在

C:\Users{你的登录名}{GUID}VS.Debug.Win32.{你的登录名}\

如果这个exe依赖了另外一个你自己写的DLL,那么部署的时候VS不会帮帮你部署DLL,但是你可以自己复制过去,这样就不用复制到System32目录下了

不知道还有没有更好的方法,继续待续……

PES2012 Training Attack And Teammate Controls

2011-11-19_235900.png

PES2012终于把挑战性训练回归了,里面的进攻训练新增了Teammate Controls(队友控制),队友控制的操作方法依赖于右摇杆键:RS,按键方法如下:

  1. 先用右摇杆(RS)的方向选择要控制的队友
  2. 按下右摇杆(RS),这个时候被选择到的队友头顶也会出现控制光标
  3. 接着就可以控制你的队友跑位了

:) 同时控制两个人,看来要花点心思来熟悉下这套新系统了

WinRT下LoadLibrary已经不能用了,那么应该怎么用呢?来自MSDN Forum的答案告诉我们:

1、使用LoadPackagedLibrary/GetProcAddress

2、将dll添加到Metro App工程里面,发布时一起打包(这一步也是必须的,dll放在相同目录是不行的,会出现错误:Specifed module not found)

参考:

How to load win32 dll with C# on metro app

用了3年的T61印证了Lenovo的低劣品质,在年初修过一次主板之后,这次彻底黑屏了,我们也不打算再花钱在这上面了,于是决定再买一台家用电脑。

波折一

定好用途和价格区间后,显示在京东上面下的单,选的货到付款刷POS机,结果快递送货时却打电话说不能刷POS机,只能现金,打了好几个电话沟通都没有解决,最终只能取消了订单。

新蛋

京东不行,我就想到了老牌电商新蛋,一番比较之后决定下单,隔天送货到公司,刷了信用卡,OK

开机与加装内存

买的时候送了2G内存,还好加内存很方便,扭开背面的两个螺丝就能看到内存槽了,已经有一块内存,在上门的另一个插槽上把送的内存也一起插上(稍微用点力),开机,正常 :)

优化华硕笔记本随机系统

  • 第一次开机竟然花了差不多3分钟!品牌机的笔记本一如既往的帮你装了一堆乱七八糟的软件,没有用的通通干掉!!
  • 无线管理,Win7自带的已经够用,卸载
  • 华硕网盘,唉国内网盘一堆,最好用的还是Dropbox,卸载
  • 华硕在线视频,烂东西,卸载
  • 送的带广告的阉割版Office,卸载
  • 趋势云杀毒,带云的杀毒,卸载

看着不爽的都干掉,特别是开机自启动的,结果是开机30S

华硕笔记本FN快捷键失灵

没高兴多久就发现问题了,优化过度了,FN快捷键用不了了,解决方法如下:

1、确认ATK是否被卸载了

2、确认以下两个服务是否被禁用,如果是恢复成自动后启动一下这两个服务,FN就能正常使用了:

ASLDRService

ATKGFNEXSrv

Win7 Home Basic升级到旗舰版

随机自带的Home Basic系统没有Aero桌面,丑的不能再丑了,用Windows Anytime Upgrade花不到10分钟就能升级到旗舰版

It’s a Metro style Wall.

Working……

引子:大家在聊Win8,WP7,Panorama,Object-C等等……于是我想说:

  1. 关于Metro和界面风格
    单靠一个Metro微软不可能翻盘,这只是一个交互风格而已,不是决定平台好坏的核心;

否则的话小米手机岂不是要成为第二个苹果,那真是笑话。

每个平台都会有自己的Human Interface Guidelines,但可供设计师发挥的空间还非常大,iPhone上各种各样的twitter客户端就是最好的佐证

  1. Microsoft和Apple之于开发者
    对于开发者Apple的生态系统毋庸置疑是最好的,但框架的开发能力Microsoft显然要高上一个等级,可惜技术并不是决定成败的唯一条件。

Apple一直坚持的软硬件两手都要抓都要硬,而微软则是做着兼容的苦差事,因为微软的战略就是合作共赢。微软的合作共赢,造就了微软帝国,也造成了反应迟钝,没能第一个做出突破,“转身太慢”。

之于开发者,Microsoft更友好,但Apple更容易来钱。

###小结:
看好微软在移动终端的发力,大公司应该也必须要快速跟进这块的研发。