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:
CComCoClass sınıfı nesne için varsayılan sınıf fabrikası ve toplama modeli sağlar.
CComObjectRootEx sınıfı tarafından belirtilen iş parçacığı modeli sınıfı temel alan bir şablon vardır İş özniteliği.İş öznitelik belirtilmezse, Apartman iş parçacığı modeli varsayılan değerdir.
IProvideClassInfo2Impl , eklenen noncreatable özniteliği için hedef nesne belirtilmemiş.
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.