VS2010 を使用して mt.exe でマニフェストを生成している登録不要の C++ COM コンポーネントがあります。クラスが使用するスレッドモデルを指定できないことを除いて、すべてが機能します。小さな再現プロジェクトを作成しました。生成されたマニフェスト ファイル ( RGS.dll.embed.manifest
) は次のとおりです。
<?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>
次のページの「Sxs と登録不要の COM アクティベーション」の例のように、threadingModel 属性が必要です 。
でスレッド モデルが指定されていないことは知っていますが、*.tlb
原田センの MSDN ドキュメントに関するコメントから、登録スクリプト ファイル ( )
http://msdn.microsoft.com/en-usmt.exe
でスレッド モデルを指定できるはずです。 /library/windows/desktop/aa375649(v=vs.85).aspx*.rgs
*.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)
(具体的には、"Valid GUID!!!" の行は、rgs:
パラメータなしで削除されますmt.exe
)
まだ私にRGS.dll.embed.manifest
はthreadingModel属性がありません。
この人は、私がオンラインでこの問題について話しているのを見つけることができる唯一の人です。解決策を見つけ、生成後にマニフェストを編集しました。mt.exe ツールが RGS ファイルを使用してマニフェストを作成する方法と、threadingModel を取得するために必要なことを知っている人はいますか?