Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET çalışma zamanının varsayılan parametre hazırlama davranışı istediğiniz işlemi gerçekleştirmediğinde, parametrelerinizin nasıl hazırlanmasını özelleştirmek için özniteliğini kullanabilirsiniz System.Runtime.InteropServices.MarshalAsAttribute . Çalışma zamanı hazırlama devre dışı bırakıldığında bu özelleştirme özellikleri geçerli değildir.
Uyarı
P/Invokes ve COM için kaynak tarafından oluşturulan birlikte çalışma yalnızca parametrelerin küçük bir alt kümesine MarshalAsAttribute saygı gösterir. Bunun yerine kaynak tarafından oluşturulan birlikte çalışma için kullanılması MarshalUsingAttribute önerilir. Daha fazla bilgi için bkz. Kaynak oluşturma için özel sıralama.
Dize parametrelerini özelleştirme
.NET, dizeleri sıralamak için çeşitli biçimlere sahiptir. Bu yöntemler, C stili dizelerde ve Windows merkezli dize biçimlerinde ayrı bölümlere ayrılır.
C stili stringler
Bu biçimlerin her biri yerel koda null olarak sonlandırılan bir dize geçirir. Bunlar yerel dizenin kodlamasına göre farklılık gösterir.
System.Runtime.InteropServices.UnmanagedType değer |
Kodlama |
|---|---|
| LPStr | Amerikan Ulusal Standartlar Enstitüsü (ANSI) |
| LPUTF8Str | UTF-8 |
| LPWStr | UTF-16 |
| LPTStr | UTF-16 |
Biçim UnmanagedType.VBByRefStr biraz farklıdır. gibi LPWStr, dizeyi UTF-16'da kodlanmış yerel bir C stili dizeye sıralar. Ancak, yönetilen imza dizeyi referans olarak geçirmenizi sağlar ve eşleşen yerel imza dizeyi değere göre alır. Bu ayrım, bir dizeyi değer olarak alıp yerinde değiştirebilen yerel bir API'yi StringBuilder kullanmadan kullanmanıza olanak tanır. Eşleşmeyen yerel ve yönetilen imzalarla karışıklığa neden olabileceğinden, bu biçimi el ile kullanmamanızı öneririz.
Windows merkezli dize biçimleri
COM veya OLE arabirimleriyle etkileşim kurarken, büyük olasılıkla fonksiyonların dizeleri bağımsız değişkenler olarak BSTR alacağını göreceksiniz. Bir dizeyi BSTR olarak aktarabilmek için UnmanagedType.BStr yönetilmeyen türü kullanabilirsiniz.
WinRT API'leriyle etkileşimdeyseniz, bir dizeyi UnmanagedType.HString olarak HSTRING'ye yerleştirmek için bu biçimi kullanabilirsiniz.
Dizi parametrelerini özelleştirme
.NET ayrıca dizi parametrelerini sıralamak için birden çok yol sağlar. C stili bir dizi alan bir API'yi çağırıyorsanız yönetilmeyen türü kullanın UnmanagedType.LPArray . Dizideki değerlerin özelleştirilmiş bir sıralamaya ihtiyacı varsa, bunun için özniteliğindeki [MarshalAs] alanını kullanabilirsinizArraySubType.
COM API'leri kullanıyorsanız, dizi parametrelerinizi büyük olasılıkla s olarak SAFEARRAY*hazırlamanız gerekir. Bunu yapmak için yönetilmeyen türü kullanabilirsiniz UnmanagedType.SafeArray .
SAFEARRAY öğelerinin varsayılan türü, alanları özelleştirme object tablosunda görülebilir. ve MarshalAsAttribute.SafeArrayUserDefinedSubType alanlarını kullanarak MarshalAsAttribute.SafeArraySubType öğesinin tam öğe türünü SAFEARRAYözelleştirebilirsiniz.
Boole veya ondalık parametreleri özelleştirme
Boole veya ondalık parametreleri sıralama hakkında bilgi için bkz. Yapı hazırlamayı özelleştirme.
Nesne parametrelerini özelleştirme (yalnızca Windows)
Windows'da .NET çalışma zamanı, nesne parametrelerini yerel koda hazırlamanın çeşitli yollarını sağlar.
BELİRLİ COM arabirimleri olarak dizgileme
API'niz bir COM nesnesine işaretçi alırsa, .NET'e bu belirli arabirimler olarak sıralamasını bildirmek için object türündeki bir parametrede aşağıdaki UnmanagedType biçimlerden herhangi birini kullanabilirsiniz.
IUnknownIDispatchIInspectable
Ayrıca, eğer türünüz [ComVisible(true)] olarak işaretlendiyse veya object türünü taşıyorsanız, türünüzün COM görünümü için nesnenizi COM çağrılabilir bir sarmalayıcı olarak taşımak amacıyla UnmanagedType.Interface biçimini kullanabilirsiniz.
Bir'e göre sıralama VARIANT
Yerel API'niz bir Win32 VARIANT alırsa, nesnelerinizi VARIANTler olarak düzenlemek için UnmanagedType.Struct biçimini object parametrenizde kullanabilirsiniz.
.NET türleri ile VARIANT türleri arasında eşleme hakkında bilgi için object alanları özelleştirme belgelerine bakın.
Özel düzenleyiciler
Yerel bir COM arabirimini farklı bir yönetilen türe yansıtmak istiyorsanız, kendi özel marşhaling kodunuzu sağlamak için UnmanagedType.CustomMarshaler biçimini ve ICustomMarshaler uygulamasını kullanabilirsiniz.