64位win7注冊com組件類別失敗解決辦法


最近遇到了這個問題,在注冊com組件類別時總是失敗,提示成功,但是通過oleviewer卻看不到。

注冊腳本:

HKCR
{
   NoRemove 'Component Categories'
   {
     NoRemove {7BAAA0EE-A752-4C5A-905C-80404BB9F06F}
     {
       val '409' = s 'vector-cpp'
     }
   }
    atl.test.1.1 = s 'Test Class'
    {
        CLSID = s '{6490606F-5AD6-4315-8726-34B021198622}'
    }
    atl.test.1 = s 'Test Class'
    {        
        CurVer = s 'atl.test.1.1'
    }
    NoRemove CLSID
    {
        ForceRemove {6490606F-5AD6-4315-8726-34B021198622} = s 'Test Class'
        {
            ProgID = s 'atl.test.1.1'
            VersionIndependentProgID = s 'atl.test.1'
            ForceRemove Programmable
            InprocServer32 = s '%MODULE%'
            {
                val ThreadingModel = s 'Apartment'
            }
            TypeLib = s '{E455C0B3-91DD-4F41-A79C-9A00403E39E6}'
            Version = s '1.0'
            'Implemented Categories'
            {
                {7BAAA0EE-A752-4C5A-905C-80404BB9F06F}
            }
        }
    }
}

浪費了大半天時間,本身注冊腳本寫得是沒問題的。

問題出在注冊表上,我的系統是win7 X64位的,但是我編譯的項目工程師基於WIN32平台的。

image

這樣的話,com組件在自注冊會把CLSID注冊到win7 64位注冊表下對應的32位子項CLSID中(如下):

image

並沒有注冊到64位對應的HKCR\CLSID下,所以自然在oleviewer下的Component Categories對應組建類別下找不到對應的CLSID。

 

解決方法很簡單,就是把項目編譯平台改成X64!

image

然后重新編譯,這樣對應CLSID就會被注冊到64位注冊表的CLSID下,自然在oleviewer下的Component Categories就可以看到了。

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM