2010-01-15 14 views
14

COM Interop için yönetilen bir sınıfı elle kaydederken, belirli kayıt defteri anahtarlarına gerek duyulur. ÖrneğinYönetilen COM Bileşeni kaydedilirken 'Uygulanan Kategoriler' anahtarı gerekli mi?

HKEY_CLASSES_ROOT 
    CLSID\[My Cls Id] 
    InprocServer32 
    (Default) = "mscoree.dll" 
    Assembly = [My assembly name] 
    etc. 

ben VS COM birlikte çalışma için bir kütüphane kayıt olduğunda, o da ekler fark ettik anahtar için bu anahtar olduğunu ve kesinlikle gereklidir Ne

HKEY_CLASSES_ROOT 
    CLSID\[My Cls Id] 
    Implemented Categories 
     {62C8FE65-4EBB-45e7-B440-6E39B2CDBF29} 

? Anlayabildiğim kadarıyla, hayat bu olmadan gayet iyi gidiyor, ama belki de gerekli olduğu durumlarla karşılaşmam.

cevap

23

Bu bir CATID bileşen bileşenidir. Bir kontrol ana bilgisayarı, bir araç kutusunda görünen, sadece beklenen bir arayüz grubunu uygulayan ürünleri sunan filtreleri kullanmak için kullanabilir.

HKCR\Component Categories kayıt defteri anahtarında bilinen bileşen kategorilerinin bir listesini görebilirsiniz. Regasm.exe'nin kullandığı, "bu COM sunucusu .NET'te uygulanmaktadır" anlamına gelir. Bir .NET programının yönetilen bir dilde uygulanmış bir COM sunucusu kullanmaması gerektiğinden, bilmeniz gereken bir şeydir, bu, meta verileri doğrudan derlemede kullanmalıdır.

CATID'ler iyi belgelendirilmemiş. Onları oldukça işe yaramaz kılan, sadece onları çıkarırsanız nadiren sorun yaşarsınız. Bazı kontrol ana bilgisayar satıcısı, COM sunucunuzu ana bilgisayarında kullanılabilir hale getirmek için CATID kullanmanızı gerektiriyorsa, bunu açıkça bildirir.

+0

Hans - yardımcı yanıt teşekkürler. "Bir .NET programı," yönetilen dil "yerine" * * * * yönetilen bir dilde uygulanan bir COM sunucusu kullanamaz "mı demek istiyorsun? CATID'ler hakkında daha fazla bilgiyi http://msdn.microsoft.com/en-us/magazine/cc301432.aspx –

+0

@Simon: no, COM sunucuları normal olarak yönetilmeyen bir dilde uygular. –