Lisanslama ve IClassFactory2
Sınıf nesnesinde IClassFactory arabirimi, COM'un temel nesne oluşturma mekanizmasını sağlar. IClassFactorykullanarak, bir sunucu nesne oluşturmayı makine temelinde denetleyebilir. IClassFactory::CreateInstance yönteminin uygulanması, makine lisansının varlığına bağlı olarak nesne oluşturmaya izin verebilir veya izin vermeyebilir. Makine lisansı, yazılımın satıcının yükleme diskleri gibi geçerli bir kaynaktan yüklendiğini belirtmek için makinede bulunan uygulamadan ayrı bir bilgi parçasıdır. Makine lisansı yoksa, sunucu nesne oluşturmaya izin vermeyebilir. Lisans bilgileri yazılımla birlikte kopyalanmadığından ve kopyayı alan makine lisanslanmadığından, kullanıcının yazılımı bir makineden diğerine kopyalamaya çalıştığı durumlarda makine lisanslaması korsanlığı önler.
Ancak, bileşen yazılım sektöründe satıcıların lisanslama üzerinde daha iyi bir denetim düzeyine sahip olması gerekir. Makine lisans denetimine ek olarak, satıcının bazı istemcilerin bileşen nesnesi oluşturmasına izin verirken diğer istemcilerin aynı özelliği reddetmesi gerekir. Bunun için istemci uygulaması hala geliştirme aşamasındayken istemci uygulamasının bileşenden bir lisans anahtarı alması gerekir. İstemci uygulaması, lisanssız bir makinede nesne oluşturmak için çalışma zamanında lisans anahtarını kullanır.
Örneğin, bir satıcı geliştiricilere bir denetim kitaplığı sağlarsa, kitaplığı satın alan geliştirici tam makine lisansına sahip olur ve nesnelerin geliştirme makinesinde oluşturulmasına izin verir. Geliştirici daha sonra lisanslı makinede bir veya daha fazla denetimi içeren bir istemci uygulaması oluşturabilir. Sonuçta elde edilen istemci uygulaması başka bir makinede çalıştırıldığında, bu makine özgün satıcıdan gelen denetimler için makine lisansına sahip olmasa bile istemci uygulamasında kullanılan denetimlerin diğer makinede oluşturulması gerekir.
IClassFactory2 arabirimi bu denetim düzeyini sağlar. Belirli bir bileşen için anahtar tabanlı lisanslamaya izin vermek için, bu bileşenin sınıf fabrikası nesnesine IClassFactory2 uygularsınız. IClassFactory2IClassFactorytüremiştir, bu yüzden IClassFactory2uygulandığında, sınıf fabrikası nesnesi temel COM gereksinimlerini yerine getirir.
İstemci uygulamanıza lisanslı bir bileşen eklemek için IClassFactory2'da aşağıdaki yöntemleri kullanın:
- GetLicInfo yöntemi, LICINFO yapısını sınıf fabrikasının lisanslama davranışını açıklayan bilgilerle doldurur. Örneğin, fRunTimeKeyAvail üyesi TRUEise, sınıf fabrikası işlem zamanı lisanslama için lisans anahtarları sağlayabilir.
- RequestLicKey yöntemi, bileşen için bir lisans anahtarı sağlar. İstemci bu yöntemi çağırdığında bir makine lisansı kullanılabilir olmalıdır.
- CreateInstanceLic yöntemi, lisans anahtarı parametresi (BSTRÂ bstrKey) geçerliyse lisanslı bileşenin bir örneğini oluşturur.
Not
Tür bilgilerinde, bir bileşen IClassFactory2aracılığıyla lisanslamayı destekleyen ortak sınıfı işaretlemek için lisanslı özniteliğini kullanır.
İlk olarak, aynı zamanda lisanslı bileşenin istemcisi olan ayrı bir geliştirme aracına ihtiyacınız vardır. Bu aracın amacı, çalışma zamanı lisans anahtarını almak ve istemci uygulamanıza kaydetmektir. Bu araç yalnızca bileşen için makine lisansına sahip bir makinede çalışır. Araç, çalışma zamanı lisans anahtarını almak için GetLicInfo ve RequestLicKey yöntemlerini çağırır ve ardından lisans anahtarını istemci uygulamanıza kaydeder. Örneğin, geliştirme aracı BSTR lisans anahtarını içeren bir üst bilgi (.h) dosyası oluşturabilir ve ardından bu .h dosyasını istemci uygulamanıza ekleyebilirsiniz.
İstemci uygulamanızda bileşenin örneğini oluşturmak için önce IClassFactory::CreateInstanceile doğrudan nesnesinin örneğini oluşturmayı deneyin. CreateInstance başarılı olursa, ikinci makine bileşen için lisanslanır ve nesneler dilediğiniz zaman oluşturulabilir. CreateInstance, CLASS_E_NOTLICENSED dönüş kodu ile başarısız olursa, nesneyi oluşturmanın tek yolu çalışma zamanı anahtarını CreateInstanceLic yöntemine iletmektir. CreateInstanceLic anahtarı doğrular ve anahtar geçerliyse nesnesini oluşturur.
Bu şekilde, bileşenlerle (denetimler gibi) oluşturulmuş bir uygulama, başka lisansı olmayan bir makinede çalıştırılabilir; yalnızca çalışma zamanı lisansını içeren istemci uygulamasının söz konusu bileşen nesnelerini oluşturmasına izin verilir.
IClassFactory2 arabirimi, lisanslama düzenlerinde esnekliği destekler. Örneğin, sunucu uygulayıcısı ek güvenlik için bileşendeki lisans anahtarlarını şifreleyebilir. Sunucu uygulayıcıları ayrıca farklı işlevler için farklı lisans anahtarları sağlayarak nesnelerindeki işlev düzeylerini etkinleştirebilir veya devre dışı bırakabilir. Örneğin, bir anahtar temel işlevsellik düzeyine izin verirken, diğer anahtar temel ve gelişmiş işlevlere izin verir ve bu şekilde devam eder.
İlgili konular