登録無料のC++ COMコンポーネントがあります。そのコンポーネントのマニフェストはVS2010を使用してmt.exeで生成しています。私のクラスで使用するスレッドモデルを指定することはできません。私は、そのマニフェストファイル(RGS.dll.embed.manifest
)生成された次のようにある小さなREPROプロジェクト、作成:登録無料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
に指定されていない知っているが、セン原田さんからmt.exe
のためのMSDNのドキュメントにコメント、あなたは(*.rgs
)登録スクリプトファイル内のいずれかを指定することができるはずです http://msdn.microsoft.com/en-us/library/windows/desktop/aa375649(v=vs.85).aspx
だから私は、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
ファイル*.rgs
ファイル(特に "有効なGUID !!!" 行がmt.exe
に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)
はまだ私のRGS.dll.embed.manifest
がThreadingModelが属性を持っていません。
問題について話しているのは、この人だけです。http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/dbab28cd-023f-45b1-be62-7dc71e8d3d9fです。解決策が見つからず、マニフェストが生成された後でマニフェストを編集したことはありません。誰でもmt.exeツールがRGSファイルを使用してマニフェストを作成する方法を知っていますか?そして、もう一方のスレッドからthreadingModelを取得するために何をする必要がありますか?