我有一個註冊免費的C++ COM組件,其清單我使用VS2010與mt.exe生成。除了我無法指定我的類使用哪種線程模型外,其他所有工作都適用。我創建了一個小型攝製項目,其生成的清單文件(RGS.dll.embed.manifest
)如下:註冊免費COM,線程模型,MT.exe和* .RGS腳本
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<file name="RGS.dll" hashalg="SHA1">
<comClass clsid="{4EB506E0-0D9C-4281-9B61-F027376E21C3}" tlbid="{6B48D06F-A84C-4B72-A70F-F1B091789E67}"></comClass>
<typelib tlbid="{6B48D06F-A84C-4B72-A70F-F1B091789E67}" version="1.0" helpdir="" flags="HASDISKIMAGE"></typelib>
</file>
<comInterfaceExternalProxyStub name="IRgsObject1" iid="{4620CAB8-3E56-42EC-818E-8A55DF9267B7}" tlbid="{6B48D06F-A84C-4B72-A70F-F1B091789E67}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub>
</assembly>
我有一個問題的部分是comClass節點
<comClass clsid="{4EB506E0-0D9C-4281-9B61-F027376E21C3}"
tlbid="{6B48D06F-A84C-4B72-A70F-F1B091789E67}"></comClass>
應有的ThreadingModel屬性,如在以下頁面的「Sxs和免費註冊COM激活」示例中: http://blogs.msdn.com/b/junfeng/archive/2006/04/20/579748.aspx
我知道線程模型未在*.tlb
中指定,但來自Sen Harada's在MSDN文檔的mt.exe
評論,你應該能夠指定一個在註冊腳本文件(*.rgs
) http://msdn.microsoft.com/en-us/library/windows/desktop/aa375649(v=vs.85).aspx
所以我有*.rgs
文件的ATL嚮導創建
HKCR
{
NoRemove CLSID
{
ForceRemove {4EB506E0-0D9C-4281-9B61-F027376E21C3} = s 'RgsObject1 Class'
{
ForceRemove Programmable
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Neutral'
}
TypeLib = s '{6B48D06F-A84C-4B72-A70F-F1B091789E67}'
Version = s '1.0'
}
}
}
所以我給該*.rgs
文件mt.exe
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /out:"Debug\RGS.dll.embed.manifest" /tlb:"Debug\RGS.tlb" /rgs:"RgsObject1.rgs" /dll:"RGS.dll" /manifest Debug\RGS.dll.intermediate.manifest
而且從構建日誌中看到,它已經成功地分析了*.rgs
文件
Valid GUID!!! {4EB506E0-0D9C-4281-9B61-F027376E21C3}
Adding entry ClsidTable[{4EB506E0-0D9C-4281-9B61-F027376E21C3}] = RgsObject1 Class
CManGenLib.ParseFileContents::Appending class {00000000-0000-0000-0000-000000000000}
Processed .RGS file successfully
Found type library in file , guid {6B48D06F-A84C-4B72-A70F-F1B091789E67} (contains 2 types)
CManGenLib.ProcessTlb::Appending class {6B48D06F-A84C-4B72-A70F-F1B091789E67}
Found interface {4620CAB8-3E56-42EC-818E-8A55DF9267B7} 'IRgsObject1'
Processed .TLB file successfully
Looking for pstub {4620CAB8-3E56-42EC-818E-8A55DF9267B7} (IRgsObject1)
(特別是 「有效的GUID !!!」 行不rgs:
參數去mt.exe
)
但我的RGS.dll.embed.manifest
不具備的ThreadingModel屬性。
這個人是我在網上唯一可以找到的關於問題http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/dbab28cd-023f-45b1-be62-7dc71e8d3d9f的在線人員,他從來沒有找到解決方案並在生成清單後對其進行編輯。有誰知道mt.exe工具如何使用RGS文件來創建清單,以及我需要做什麼才能從另一端獲取threadingModel?