2010年1月25日 星期一

本機編譯好的程序無法在沒有裝VC的機子上運行

由於VC++2005默認採用動態鏈接運行時庫,導致編譯好的程序在運行時依賴於本機的運行時庫,當然移植到別的機子上就不能運行了。
對於一般的win32控制台程序,可以這樣設置:
  • 點擊"項目"--- "屬性",打開項目屬性頁,點擊"配置屬性"--- "C/C++"--- "代碼生成",將此頁面右邊的"運行時庫"由默認的"多線程DLL(/MD)"改為"多線程(/MT)"或"多線程調試(/MTD)"即可。 不過一般情況下生成release版本的應用程序時選"多線程(/MT) "即可,因為這樣生成的exe程序較小。 而如果選了"多線程調試(/MTD) ",則由於加入了大量的調試信息而使生成的exe程序會增大好幾倍。 (project ->XXX property page ->configuration properties ->C/C++ ->Code Generation ->Runtime Lib.)

  • 對於MFC程序,則點擊"項目"--- "屬性",打開項目屬性頁,點擊"配置屬性"--- "常規",將右邊"項目默認值"欄目中的"MFC的使用"改為"在靜態庫中使用MFC"。確定後,在"配置屬性"--- "C/C++"--- "代碼生成"頁面的"運行時庫"會自動改為靜態鏈接----即"多線程(/MT)"。這樣編譯出來的程序就可以在沒有裝VC的機子上運行了。


原文出處:http://www.acejoy.com/space/html/56/t-956.html

2010年1月14日 星期四

Dynamic Sprite Font - XNA 顯示及動態生成多國文字

下載點:http://sites.google.com/a/goldmoz.co.cc/icecatsfiles/dang-an-file/TestDynamicSpriteFont.rar?attredirects=0&d=1

Dynamic Sprite Font是一個XNA的Plug-in,
它應該是目前為止用法最方便的XNA多國文字顯示方法,
基本上用法跟SpriteFont相同,
只是Processor使用Dynamic Sprite Font Description,
之後如常使用Content.Load("Font Name");,
哪麼設定就會完成.

以下是例子:

spriteBatch.Begin();
spriteBatch.DrawString(font, "我是中國人", Vector2.Zero, Color.Red);
spriteBatch.DrawString(font, "I am a Chinese", new Vector2(0, 100), Color.White);
spriteBatch.DrawString(font, "我是中国人", new Vector2(0, 200), Color.Yellow);
spriteBatch.DrawString(font, "私は中国人です", new Vector2(0, 300), Color.Black);
spriteBatch.DrawString(font, "저는 중국인이에요", new Vector2(0, 400), Color.Purple);
spriteBatch.DrawString(font, "मैं एक चीनी रहा हूँ", new Vector2(0, 500), Color.LimeGreen);
spriteBatch.End();


2010年1月13日 星期三

iTube TV 1.00 - 把YouTube 當你的 mp3 播放器

小弟的C#作品,令大家又可以一邊聽歌一邊欣賞MV

iTube TV
- 內置播放器
- 支持 YouTube 搜查功能
- 所有 YouTube 影片都可以播放
- 檔案體積小巧
- 必須在 .NET 2.0 Framework 以上運行
- 速度快

以下是Screenshots:

















下載點:http://sites.google.com/a/goldmoz.co.cc/icecatsfiles/dang-an-file/iTubeTV1.00.rar?attredirects=0&d=1

好用工具:ILMerge (將多的 .NET 組件合併成單一組件)

當 .NET 專案開發越來越多的情況下,通常會有一大堆組件的情況,微軟提供一套 ILMerge 免費工具可以協助你將多個組件合併成單一個 .NET 組件,有效減少部署檔案的數量以及增加部署的彈性。

由於 ILMerge 是指令列工具,在安裝完成之後,所有檔案都放在 C:\Program Files\Microsoft\ILMerge 目錄下,目錄下的 ILMerge.doc 檔案有完整的說明,以下是我閱讀完後的一些摘要筆記:

並非所有組件都能 Merge,例如有些組件包含 unmanaged code 就不一定能 Merge 成功,建議在 Merge 完後利用 PEVerify 工具 (the .NET Framework SDK tool) 驗證輸出的組件是否有效。
執行 ILMerge 時的組件清單(input assemblies)的第一個組件為主要組件(primary assembly),如果第一個組件為執行檔(*.exe),則 ILMerge 過的組件就會以此組件中定義的執行入口點(Main method)為主。
如果主要組件(primary assembly)有強式名稱簽章過,而且參數也有指定 snk 檔時,ILMerge 過後會自動重簽(re-signed)。
以下是一些使用範例:

1. 將多個組件合併成一個,其中第一個組件為「主要組件」,通常是執行的主要程式
ILMerge.exe /out:Merged.Output.exe Assembly1.exe Assembly2.dll Assembly3.dll

2. 將多個類別庫組件合併成一個,而且除了主要組件外,任何其他組件都不會公開給其他組件使用
ILMerge.exe /internalize /out:Merged.Output.dll Assembly1.dll Assembly2.dll

3. 在合併完組件後重新利用強式名稱簽名過
ILMerge.exe /keyfile:my.snk /out:Merged.Output.dll Assembly1.dll Assembly2.dll

4. 在組合的時候留下 ILMerge 的紀錄 ( 當 /log 參數不加上 :Output.log 則會將 Log 輸出到 Console )
ILMerge.exe /log:Output.log /out:Merged.Output.dll Assembly1.dll Assembly2.dll

如果不習慣用指令用工具的人也可以考慮使用 ILMerge-GUI 幫你組合組件

下載點: http://www.microsoft.com/downloads/details.aspx?FamilyID=22914587-b4ad-4eae-87cf-b14ae6a939b0&displaylang=en

2010年1月4日 星期一

XNA 無限制的 FPS

this.IsFixedTimeStep = false;

// intialize the graphics
graphics.SynchronizeWithVerticalRetrace = false;
graphics.ApplyChanges();

加上以上Code在Game.cs的Initialize()中,
就可以由60fps升到4000fps以上 (我使用NVIDIA® GeForce® 9800 GT和4GB Ram)