2013年12月1日 星期日

BCB 編譯的時候出現 Unresolved external ThrowIfOutOfRange Error

最近在編譯一個就的程式的時候出現了一個 Linker Error

Unresolved external '__stdcall System::AnsiString::ThrowIfOutOfRange(int) const'

仔細的去查了程式碼發現問題發生的原因是在程式中使用了
AnsiString  的 operator[]

在網路上找了幾天之後發現這個問題從BCB5就存在
解決的方法是
1. 在option -> Advanced Compiler -> Calling convention 改用  C
或是
2. 直接修改dstring.h
    我的檔案是位在$(BCB)\Include\Vcl\dstring.h (208行)
     將void  ThrowIfOutOfRange(int idx) const;改成
     void __cdecl ThrowIfOutOfRange(int idx) const;

2013年11月5日 星期二

command mode 設定檔案的時間

寫了一支小工具可以使用dos command 來設定檔案的時間
放在 google 雲端硬碟中, 鏈結如下, 下載後副檔名改為 .7z
使用7z來解壓縮

https://googledrive.com/host/0B66PlkYn12VKcG5iLS1ZNmhsSU0

使用Google 雲端硬碟放置網頁連結可直接下載的檔案

1.將檔案放到Google雲端硬碟後
   在共用設定將檔案的權限由私人設為公開
   這個畫面會得到一個共用連結


2.將共用連結拿來修改
原來應該是類似
https://drive.google.com/file/d/0B66PlkYn12VKcG5iLS1ZNmhsSU0/edit?usp=sharing

將紅色部分接在 https://googledrive.com/host/ 之後
得到https://googledrive.com/host/0B66PlkYn12VKcG5iLS1ZNmhsSU0

這樣就可以透過URL Link 來使用css或js

2013年10月3日 星期四

利用 IIS7 的 ARR 模組做到 Reverse Proxy 機制

為了讓 IIS 達到類似Apache Proxy 功能,
所以找到了使用 ARR (Application Request Routing) 這個模組
目前的最新版本是 3.0
我的ARR是透過下載 Web Platform Installer 4.6 來安裝

1.安裝 ARR 3.0 & URL Rewrite

2. 在IIS 操作介面中使用 URL Rewrite
3.Add Rule(s)

4. Specify Rewrite Map
5.Add Mapping Entry
6. 回到URL Rewrite 介面去編輯剛剛新增的 Rule & 先設定 Match URL
   這裡的Pattern經過我實驗的結果是針對path及之後的Query
   Action 要使用的時候使用 {R:0}
7. 設定條件( Conditions )

這裡設定的就是將HTTP_HOST 經過剛剛設定的 ReverseProxy 給替換成新的
取用的時候使用{C:0}
8.設定Action
記得 Append query string 與 Stop processing of subsequent rules 要打勾

9. 進入Application Request Routing 進行設定, 啟用Proxy功能, 以及取消勾選 Reverse rewrite host in response headers選項

參考網址:
http://blog.miniasp.com/post/2009/04/13/Using-ARR-to-implement-Reverse-Proxy.aspx
http://blog.miniasp.com/post/2010/11/25/Setting-the-right-REMOTE_ADDR-behind-the-Reverse-Proxy-using-IIS-URL-Rewrite-Module.aspx
http://www.iis.net/learn/extensions/url-rewrite-module/reverse-proxy-rule-template
http://ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/

2013年9月30日 星期一

HEAP CORRUPTION DETECTED

最近在Visual Studio 2010 上開發了一個工具,
在 detete 一塊記憶體的時候跳出了一個錯誤訊息

找了幾天沒發現原因, 後來靠google大神才知道
這個錯誤在debug mode的時候才會出現,
release mode不一定會出現
原因是debug mode在malloc時會多alloc一些memory
以便檢查是否有寫過頭的情況發生

其實在錯誤訊息舊有提到 "CRT detected that the application wrote to memory after end of heap buffer"

後來去trace 後發現, vc在 alloc 的這段memory前後都放了一些檢查碼來check是否有寫過頭的現象發生, 如果在debug mode有出現這些訊息而release mode沒有出現的時候
就不要不放在心上, 不然哪天程式冒出不知明原因的錯誤就不好找了

ps: CRT 指的應該就是 C RunTime lib

2013年9月16日 星期一

IIS6&7 handler 開發

最近試著寫了一個簡單的handler for iis6&7
紀錄一下免得以後忘了

1. Visual Studio 新增一個 MyIIS7Handler 類別庫的專案

2.新增System.Web 的參考
3.新增以下的Code

namespace MyIIS7Handler
{
    public class MyHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return false; }
        }

        public void ProcessRequest(HttpContext context)
        {
            DateTime dt;
            dt = DateTime.Now;

            context.Response.Write(String.Format("<h1>{0}</h1>",dt.ToLongTimeString()));
        }
    }
}

4.將程式編譯好放到IIS Server上(iis7的設定方式所參考的網頁都有說明, 這裡僅記錄iis6)
先將dll 放到網站的bin目錄下


5.網站的Web.Config 新增以下設定於<system.web>內
目的是讓副檔名是tm的檔案都透過我們的handler來執行

        <httpHandlers>
   <add verb="*" path="*.tm" type="MyIIS7Handler.MyHandler"/>
        </httpHandlers>

6.還要設定副程式讓aspnet_isapi來執行我們的 dll

參考網頁:
How To Create an ASP.NET HTTP Handler by Using Visual C# .NET
INFO: ASP.NET HTTP 模組與 HTTP 處理常式概觀
Migration of ASP.NET app from IIS6 to IIS7 (7.5)
Develop a Native C\C++ Module for IIS 7.0
Developing a Module Using .NET
Developing IIS7 modules and handlers with the .NET framework

2013年4月15日 星期一

javascript 抓取滑鼠位置

document.onmousemove = function (event) {
  var e = event || window.event;
  if(e.pageX || e.pageY)
    return {x:e.pageX, y:e.pageY};
  else
    return {
      x: e.clientX + document.body.scrollLeft - document.body.clientLeft,
      y: e.clientY + document.body.scrollTop - document.body.clientTop
    };
}

2013年4月10日 星期三

android 部分 browser 的input 與 textarea 不能使用css

最近工作上碰到一個問題
使用android的預設瀏覽器的時候
發現當focus到input或textarea要輸入文字的時候
css會被取消掉的問題
本來一直以為是瀏覽器故意這麼做,沒有解決的方法
後來無意間還是讓我找到解法
就是在css加上

-webkit-user-modify: read-write;

後來有查到這是chrome跟safari支援的寫法
firefox 支援的是
-moz-user-modify: read-write;

裡面可以填的參數有
read-only, read-write, read-write-plaintext-only

CSS3也有定義相關的參數, 只是不知道目前各瀏覽器的支援程度如何
user-modify
相關的連結如下
http://www.w3.org/TR/2000/WD-css3-userint-20000216#user-modify

google keep 網頁版

https://drive.google.com/keep/