2013年8月9日 星期五

驗證子網路遮罩是否合法(NetMask Check)

驗證Netmask方式很簡單,只要判斷從netmask是否為連續1即可。

bool CheckNetMask (char* pszMask)
{   
   bool bFoundOne = false;
   unsigned long lNetMask;
    if (pszMask != NULL)
    {
        lNetMask = inet_addr(pszMask);
        if (lNetMask == INADDR_NONE)
        {
            if (strcmp(pszMask, "255.255.255.255") == 0)
                return true;
            else
                return false;
        }
        else
        {
            lNetMask = ntohl(lNetMask);
            unsigned long ulMask = 1;

            while (ulMask != 0)
            {
                if (lNetMask & ulMask)
                    bFoundOne = true;
                else if (bFoundOne)
                    return false;
                ulMask << 1;
            }
           
            return true;
        }
    }
    else
        return false;
}

2013年8月4日 星期日

CoCreateInstance Fail

明明Filter有註冊,但在呼叫 CoCreateInstance時卻回傳「類別未登錄0x8004154」,經過追查之後才發現原來此Filter在Linker的Fixed Base Address的選項設定選擇了/FIXED,才導致呼叫時有機會失敗。修正方法就是將/FIXED改為/FIXED:NO的選項。

我們可以運用dumpbin的工具來驗證,如果沒有出現.reloc區段的話,表示設定的為/FIXED