Aracılığıyla paylaş


coclass

com arabirimini uygulayabilirsiniz bir com nesnesi oluşturur.

[coclass]

Notlar

Coclass C++ öznitelik coclass yapýsý oluşturulan .idl dosyasına yerleştirir.

Bir coclass tanımlarken de belirtebilirsiniz UUID, sürüm, İş, vi_progid, ve ProgID öznitelikleri.Herhangi biri belirtilmemişse, oluşturulacak.

Sınıfları ile iki üstbilgi dosyaları içeriyorsa, coclass özniteliği ve bir GUID belirtmek istemiyorsanız derleyici her iki sınıf için aynı GUID kullanır ve bir MIDL hata neden.Bu nedenle, kullanmanız gereken uuid özniteliğini kullandığınızda coclass.

atl projeleri

Bu öznitelik bir sınıf veya yapı tanımı atl projesinde, önce geldiğinde onu:

  • Kod veya nesne için otomatik kayıt desteklemek için veri injects.

  • Kod veya nesne için bir com sınıf fabrikası desteklemek için veri injects.

  • Kod veya veri uygulamak için injects IUnknown ve creatable com nesnesi nesne olun.

Özellikle, aşağıdaki temel sınıflar hedef nesneye eklenir:

Katıştırılmış IDL ile tanımlanmamış herhangi bir çift arabirim ile ilgili son olarak yerini IDispatchImpl sınıfı.Çift arabirim içinde katıştırılmış IDL tanımlanırsa, temel listesinde belirli arabirim değiştirilmez.

Coclass özniteliği de yaptığı aşağıdaki işlevleri kodu aracılığıyla veya harf GetObjectCLSID, bir static yöntem bir taban sınıftaki olarak CComCoClass:

  • UpdateRegistryHedef sınıfının sınıf üreticisi kaydeder.

  • GetObjectCLSID, kayıt için ilgili olduğu da kullanılabilir hedef sınıf CLSID değeri elde etmek için.

  • GetObjectFriendlyName varsayılan biçim dizesi döndürür "<hedef sınıf adı> Object".Bu işlev zaten varsa, ekli değil.Bu işlev bir yaşamanızı adını otomatik olarak oluşturulan bir döndürmek için hedef sınıfı ekleyin.

  • GetProgID, kayda ilgili olduğu, ile belirtilen dize döndürür ProgID özniteliği.

  • GetVersionIndependentProgID aynı işlevselliğe sahip GetProgID, ancak belirtilen dize döndürür vi_progid.

Hedef sınıfı com Eşle ilgili olarak aşağıdaki değişiklikler yapılır:

  • com harita hedef sınıf türeyen tüm arabirimler için girişleri ve tarafından belirtilen tüm girdiler eklenir com arabirimi giriş noktalarını özniteliği veya gerektirdiği toplamları özniteliği.

  • Bir object_entry_auto makro com eşlemenin içine eklenir.Bu makro benzer object_entry işlevsellik açısından com harita hedef sınıfının bir parçası olması gerekmez, ancak.

Sınıf için .idl dosyasında oluşturulan coclass adını sınıfla aynı adı olacaktır.Örneğin ve aşağıdaki örneğe bakarak istemcisinde MIDL oluşturulan üstbilgi dosyası aracılığıyla coclass CMyClass, sınıf kimliği erişmek için CLSID_CMyClass kullanın.

Örnek

Aşağıdaki kod nasıl kullanılacağını gösterir coclass özniteliği:

// cpp_attr_ref_coclass1.cpp
// compile with: /LD
#include "unknwn.h"
[module(name="MyLib")];

[ object, uuid("00000000-0000-0000-0000-000000000001") ]
__interface I {
   HRESULT func();
};

[coclass, progid("MyCoClass.coclass.1"), vi_progid("MyCoClass.coclass"), 
appobject, uuid("9E66A294-4365-11D2-A997-00C04FA37DDB")]
class CMyClass : public I {};

Aşağıdaki örnek varsayılan uygulama olarak birbirlerinden kodunda görünen işlev geçersiz kılmak gösterilmiştir coclass özniteliği.Bkz: /Fx kodu görüntüleme hakkında daha fazla bilgi için.Herhangi bir temel sınıf ya da bir sınıf için kullandığınız arabirimi olarak görünür kodu.   Daha da ötesi bir sınıf kodu, varsayılan olarak bulunur ve açıkça o sınıfın temel olarak kendi coclass için belirttiğiniz öznitelik sağlayıcı kodunda belirtilen formu kullanın.

// cpp_attr_ref_coclass2.cpp
// compile with: /LD
#include <atlbase.h>
#include <atlcom.h>
#include <atlwin.h>
#include <atltypes.h>
#include <atlctl.h>
#include <atlhost.h>
#include <atlplus.h>

[module(name="MyLib")];

[object, uuid("00000000-0000-0000-0000-000000000000")]
__interface bb {};

[coclass, uuid("00000000-0000-0000-0000-000000000001")]
class CMyClass : public bb {
public:
   // by adding the definition of UpdateRegistry to your code, 
   // the function will not be included in the injected code
   static HRESULT WINAPI UpdateRegistry(BOOL bRegister) {
      // you can add to the default implementation
      CRegistryVirtualMachine rvm;
      HRESULT hr;
      if (FAILED(hr = rvm.AddStandardReplacements()))
         return hr;
      rvm.AddReplacement(_T("FriendlyName"), GetObjectFriendlyName());
      return rvm.VMUpdateRegistry(GetOpCodes(), GetOpcodeStringVals(),
         GetOpcodeDWORDVals(), GetOpcodeBinaryVals(), bRegister);
   }
};

Gereksinimler

Öznitelik içerik

Uygulama alanı

sınıf,struct

Yinelenebilir

Hayyr

Gerekli öznitelikleri

None

Geçersiz öznitelik

None

Öznitelik içerikleri hakkında daha fazla bilgi için bkz: Öznitelik içerikleri.

Ayrıca bkz.

Başvuru

appobject

Diğer Kaynaklar

IDL öznitelikleri

com öznitelikleri

Sınıf öznitelikleri

TypeDef, Enum, Birliği ve yapı öznitelikleri