Ben, manifestosu VS2010 kullanarak mt.exe ile oluşturduğum bir kayıt C++ COM bileşeni var. Her şey çalışır, sınıflarımın hangi diş modeli kullandığını belirleyemem. olarak,Kaydı Free COM, Threading Modelleri, MT.exe ve * .RGS komut dosyaları
<?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>
Ben bir sorun var bölüm
<comClass clsid="{4EB506E0-0D9C-4281-9B61-F027376E21C3}"
tlbid="{6B48D06F-A84C-4B72-A70F-F1B091789E67}"></comClass>
ThreadingModel özniteliği olmalıdır comClass düğümdür: Kimin bildirim dosyası (RGS.dll.embed.manifest
) oluşturulan aşağıdaki gibidir küçük repro projeyi yarattı "SXS ve Kayıt Ücretsiz COM aktivasyonu" aşağıdaki sayfada örnekte: http://blogs.msdn.com/b/junfeng/archive/2006/04/20/579748.aspx
Ben parçacığı modeli *.tlb
belirtilmemişse biliyorum ama Şen Harada en dan mt.exe
için MSDN Dokümanlar üzerinde yorum, bir kayıt Senaryo dosyası Yani (*.rgs
) http://msdn.microsoft.com/en-us/library/windows/desktop/aa375649(v=vs.85).aspx
Ben ATL sihirbaz
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'
}
}
}
yüzden vermek oluşturulan *.rgs
dosya içinde birini belirtmek gerekir 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
Ve üzere *.rgs
dosya başarıyla ayrıştırıldı ettiğini inşa günlüğünden bakın *.rgs
dosyası (özellikle "Geçerli GUID !!!" çizgi mt.exe
için rgs:
parametre olmadan gitti)
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)
HENÜZ benim RGS.dll.embed.manifest
ThreadingModel'ı niteliği yoktur.
Bu kişi, http://social.msdn.microsoft.com/Forums/en-US/vcmfcatl/thread/dbab28cd-023f-45b1-be62-7dc71e8d3d9f numaralı sorundan bahsetmiş olduğum tek çevrimiçi kişidir ve asla bir çözüm bulamadı ve oluşturulduktan sonra bu bildiriyi düzenledi. Birisi mt.exe aracının bildiriyi oluşturmak için RGS dosyasını nasıl kullandığını ve diğer ucu bir iş parçacığı oluşturmak için ne yapmam gerektiğini biliyor mu?