Aracılığıyla paylaş


Arabirim Tasarım Kuralları

Bu bölümde, arabirim tasarım kurallarının ve yönergelerinin kısa bir özeti sağlanır. Bu kuralların bazıları COM mimarisine özgüyken, diğerleri arabirim tasarım dili MIDL tarafından uygulanan kısıtlamalardır. COM arabirimi tasarımının ayrıntıları için bkz. idl dosyasının anatomisi .

Tanım gereği nesne, IUnknown arabirimini veya IUnknown'den türetilen bir arabirimi uygulamadığı sürece bir COM nesnesi değildir. Buna ek olarak, aşağıdaki kurallar BIR COM nesnesi üzerinde uygulanan tüm arabirimler için geçerlidir:

  • Benzersiz arabirim tanımlayıcısı (IID) olmalıdır.
  • Sabit olmalılar. Oluşturulduktan ve yayımlandıktan sonra tanımlarının hiçbir bölümü değişmeyebilir.
  • Uzaktan işlemeyi işleyen sistemin bölümlerinin RPC hatalarını bildirebilmesi için tüm arabirim yöntemlerinin HRESULT değeri döndürmesi gerekir.
  • Arabirim yöntemlerindeki tüm dize parametreleri Unicode olmalıdır.
  • Veri türleriniz yeniden değiştirilebilir olmalıdır. Bir veri türünü uzaktan iletişimlenebilir bir türe dönüştüremiyorsanız, kendi hazırlama ve özetleme yordamlarınızı oluşturmanız gerekir. Ayrıca, LPVOIDveya void *uzak bilgisayarda bir anlamı yoktur. Gerekirse, IUnknowniçin bir işaretçi kullanın.

Not

MIDL'nin geçerli uygulaması işlevi aşırı yüklemeyi veya birden çok devralmayı işlemez.

 

Diğer Arabirim Tasarımı Konuları

Verilere yönelik işaretçileri çok dikkatli kullanın. Çağrılan işlemin adres alanında verileri yeniden oluşturmak için RPC çalışma süresinin verilerin tam boyutunu bilmesi gerekir. Örneğin, bir CHAR * parametresi tek bir karakter yerine karakterlerin arabelleğine işaret ederse, veriler doğru bir şekilde yeniden oluşturulamaz. Tür tanımlarınızla temsil edilen veri yapılarını doğru bir şekilde açıklamak için MIDL ile kullanılabilen söz dizimini kullanın.

Başlatma, dizilere ve yapılara eklenmiş ve işlem sınırları boyunca geçirilen işaretçiler için gereklidir. Başlatılmamış işaretçiler aynı işlem alanındaki bir programa geçirildiğinde çalışabilir, ancak proxy'ler ve saplamalar tüm işaretçilerin geçerli adreslerle başlatıldığını veya null olduğunu varsayar.

İşaretçileri diğer ad olarak kullanırken (işaretçilerin aynı bellek parçasını işaret etmelerine izin verir) dikkatli olun. Diğer adlar kasıtlı olarak kullanılıyorsa, bu işaretçiler IDL dosyasında diğer ad olarak bildirilmelidir. Aliased olarak bildirilen işaretçiler hiçbir zaman birbirine diğer ad vermemelidir.

Bellek ayırma ve boşaltma yönteminize dikkat edin. Bir COM nesnesine işlem dışı çağrı sırasında oluşturulan bir veri yapısını boşaltmamasını açıkça bildirmediğiniz sürece (ayırma özniteliğini kullanarak) bu yapının çağrı tamamlandığında yok olacağını unutmayın. Ayrıca, artık sıralanması ve özetlenmemiş olması gereken veri yapılarının verimsiz şekilde ayrılmasıyla ortaya çıkabilecek yıkıcı ek yükü de göz önünde bulundurun.

Son olarak, COM tanımlı FACILITY_ITF kodlarıyla çakışan (0x0000 ile 0x01FF arasındaki değerler ayrılmıştır) veya aynı değere sahip diğer HRESULT değerleriyle çakışan hata kodları oluşturmayabilmeniz için HRESULT dönüş değerlerini tanımlarken dikkatli olun. Mümkün olduğunda evrensel COM başarı ve başarısızlık dönüş değerlerini kullanın ve işlev çağrısına özgü bilgileri döndürmek için HRESULTyerineparametresini kullanın.

Daha fazla bilgi için aşağıdaki konulara bakın:

  • uzaktan iletişim aracı arabirimleri tasarlama
  • COM Arabirimi Kullanarak

arabirim tanımlarını ve tür kitaplıklarını