我正在創建一個COM服務器可執行文件,並遇到類註冊的問題。當我創建我的類對象時,自動生成的.rgs文件如下所示:ATL COM類註冊.rgs文件默認
HKCR
{
NoRemove CLSID
{
ForceRemove {4C6DAD45-64B4-4C55-81C6-4CE125226421} = s 'Test Class'
{
ForceRemove Programmable
LocalServer32 = s '%MODULE%'
{
val ServerExecutable = s '%MODULE_RAW%'
}
TypeLib = s '{EAA173CA-BDBC-463A-8B7A-B010EFA467BC}'
Version = s '1.0'
}
}
}
這爲CLSID創建了正確的註冊表項。但是,當嘗試從外部調用CoCreateInstance時,我遇到了掛起。
hr = CoCreateInstance(__uuidof(Test), NULL, CLSCTX_ALL, __uuidof(ITest), (void**)&pTest);
看着其他幾個項目的例子之後,我發現他們都有類型的註冊表項:
HKEY_CLASSES_ROOT\<MODULE>.<CLASS>
HKEY_CLASSES_ROOT\<MODULE>.<CLASS>\CLSID
我調查了.RGS文件,這些類,並注意到他們有額外的條目不存在於我的.rgs文件中。我將他們添加到礦山,將其更改爲:
HKCR
{
TestModule.Test = s 'Test Class'
{
CLSID = s '{4C6DAD45-64B4-4C55-81C6-4CE125226421}'
}
NoRemove CLSID
{
ForceRemove {4C6DAD45-64B4-4C55-81C6-4CE125226421} = s 'Test Class'
{
ForceRemove Programmable
LocalServer32 = s '%MODULE%'
{
val ServerExecutable = s '%MODULE_RAW%'
}
TypeLib = s '{EAA173CA-BDBC-463A-8B7A-B010EFA467BC}'
Version = s '1.0'
}
}
}
你瞧,我的CoCreateInstance調用不再就掛了,我能夠正確地檢索指向一個ITest接口。
現在,我的問題是,鑑於上述細節,我如何確保我創建的任何未來類都具有正確的.rgs文件格式?在創建類對象時是否存在某些選項?或者我是否需要爲每個創建的課程手動添加上述內容?
我正在使用Visual Studio 2010.
感謝您的答覆,解釋和解決方案。 – 2011-04-20 23:52:23