星期二, 8月 10, 2010

嘗試在VS2010中使用C++0x的shared_ptr以及lambda expression搭配STL container

#include <iostream>
#include <vector>
#include <memory>
#include <algorithm>

using namespace std;

class Base{
public:
    int m_i;
    Base(int i):m_i(i) {}
    ~Base(){ cout << m_i << "~Base()" << endl; }
};

class Derived: public Base{
public:
    Derived(int i):Base(i) { }
    ~Derived(){
        cout << "~Derived()" << endl;
    }
};

int main()
{
    vector< shared_ptr<Base> > v;
    v.push_back(shared_ptr<Base>(new Derived(1)));
    v.push_back(shared_ptr<Base>(new Derived(2)));
    sort(v.begin(), v.end(), [](shared_ptr<Base> a, shared_ptr<Base> b){
        return a->m_i > b->m_i;
    });

    for_each(v.begin(), v.end(), [](shared_ptr<Base> a){
        cout << a->m_i << "\t";
    });
    cout << endl;
    return 0;
}

星期四, 7月 08, 2010

莫名其妙的簡繁轉換

葉:叶
舊:旧
盡:尽

星期日, 6月 06, 2010

在VS2010中,指定clean solution或project前執行某些指令

由於vs2010 IDE似乎沒有直接支援這樣設定,因此採用Import Project的方式,以便明確地看出這是額外加上去的指令。

  1. 在 *.vcxproj file中Import Project:
    <Import Project="Extra.targets"/>
  2. 建立Extra.targets file, 內容為:
    <?xml version="1.0" encoding="utf-8"?>
    <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  3.   <Target Name="BeforeCppClean">
        <Exec Command="echo Hello World" />
      </Target>
    </Project>

相關資料:

  • C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets and Microsoft.CppClean.targets
  • MSBuild Schema Reference

星期四, 12月 24, 2009

64 bit windows registry redirector and reflection

定義:

  • redirector: 讓32 bit與64 bit程式使用相同的registry key存取不同的registry實體
  • reflection: 自動同步相同registry key的32 bit與64 bit registry實體

各registry key詳細的redirection與reflection狀況需參考 Registry Keys Affected by WOW64

其他注意事項:

  • registry寫入時,如果開頭為%ProgramFiles%或%commonprogramfiles%,會視情況自動改寫為"%ProgramFiles(x86)%"或"%commonprogramfiles(x86)%"。
  • 以下目錄也會視情況被改寫: %windir%\system32, %SystemRoot%\system32,  C:\windows\system32

參考

星期三, 12月 23, 2009

64 bit windows file system redirector

32bit軟體存取路徑時的重新導向原則

  • %windir%\System32 -> %windir%\SysWOW64
  • %windir%\lastgood\system32 -> %windir%\lastgood\SysWOW64
  • %windir%\regedit.exe –> %windir%\SysWOW64\regedit.exe
  • 注意: 如果過程中觸發了UAC prompt, 則上述重新導向都不會發生。將會發生32bit軟體試圖執行64bit DLL或其他程式的問題。
    • 若要避免此問題,需在該32bit程式中直接引用SysWOW64

其他注意事項

星期四, 12月 10, 2009

在Webdashboard上建立link直接連接到造成此次build的subversion revision頁面

在header.xsl的<xsl:template match="/cruisecontrol/modifications/modification">區塊中加入以下片段:

<xsl:if test="changeNumber">
<tr>
  <td class="header-label" valign="top">
    <nobr>ChangeSet of XXXXX</nobr>
  </td>
  <td class="header-data">
      <a>
        <xsl:attribute name="href">
http://xxxx/changeset/<xsl:value-of select="changeNumber"/>
        </xsl:attribute>changeSet <xsl:value-of select="changeNumber"/>
      </a>
  </td>
</tr>
</xsl:if>

星期二, 12月 01, 2009

windows上Python第一次使用步驟

編輯與執行python程式

  1. 下載python
  2. 執行IDLE (Python GUI)
  3. Ctrl+N編輯新python程式或Ctrl+O開啟已經存在的python程式
  4. F5執行

撰寫python unit test程式

import sys
import unittest

def SayHello(name):
    return "hello " + name

class TestSayHello(unittest.TestCase):
    def testHelloAska(self):
        self.assertEqual("hello Aska", SayHello("Aska"))
    def testHelloWorld(self):
        self.assertEqual("hello World", SayHello("World"))
if __name__ == "__main__":
    if len(sys.argv) < 2:
        unittest.main()
    else:
        SayHello(sys.argv[1]);