Makale numarası: 138813 - Bu makalenin geçerli olduğu ürünleri görün.
Geçirilen ve 32-bit OLE Apı'leri ve arabirim yöntemleri alınan tüm dizeleri Unicode kullanın. Bu, ANSI dizesi için OLE geçirmeden önce onları Unicode'a dönüştürme ve OLE ANSı'YE alınan Unicode dizelerinin dönüştürmek kullanan uygulamalar gerektirir. Bu makalede, bu dönüştürmeler nasıl yapılacağı gösterilmektedir.
Unicode (veya geniş bir karakter), Windows NT uygular ve ANSI sürümleri Win32 işlevlerin dize parametreleri alır. Ancak Windows 95, Unicode sürümü dizesini parametre çoğu Win32 işlevlerini uygulamıyor. Bunun yerine yalnızca ANSI sürümleri bu işlevleri gerçekleştirir.
Bir ana bu kuralın istisnası, 32-bit OLE ' dir. Unicode, yalnızca 32-bit OLE Apı'lar ve Windows NT ve Windows 95 arabirim yöntemleri kullanın. Bu işlevler ANSI sürümünü, Windows NT veya Windows 95 uygulanmadı.
Bu, Windows 95 ve Windows NT'DE çalışması için gereken bir 32-bit uygulama OLE Win32 dışı işlevleri ANSI sürümünü kullanmalısınız ve bunlar için OLE geçirilmeden önce ANSI dizesi Unicode'a dönüştürme anlamına gelir.
Windows NT'DE çalışan 32 bitlik bir Unicode uygulama herhangi bir ANSı/Unicode dönüştürme işlevleri kullanmanız.
Win32 MultiByteToWideChar ve WideCharToMultiByte ANSI dizesi, Unicode ve Unicode dize ANSı'YE dönüştürmek için alan sağlar. Bu makalede, AnsiToUnicode ve ANSı/Unicode dönüşümü için bu işlevleri kullanan UnicodeToAnsi sağlar.
Örnek bu işlevlerin aşağıdaki gibi kullanılır. CoTaskMemFree CoTaskMemAlloc dizeyi ayırmaya kullandıysanız, dönüştürülmüş dize boşaltmak için kullanılır. Başka bir OLE bileşen için bir çıkış parametresi döndürdü, bu bileşen dizesini boşaltmak için sorumlu olduğundan dönüştürülmüş dize serbest gerekir değil. LPOLESTR bir Unicode dizesi bir işaretçidir.
Not: AnsiToUnicode ve UnicodeToAnsi dönüştürülmüş dizesini ayırmak için kullanılan ayırıcı ilgili açıklama. Yalnızca sonuç dizesini başka bir OLE bileşenini gönderilir ve bu bileşen, dize boşaltabilirsiniz kullanılacak CoTaskMemAlloc (OLE ayırıcısı) gereklidir. OLE arabirim yöntemleri için-parametreleri olarak geçirilen dizeler, bunun anlamı, OLE ayırıcısı kullanmaması. De-out-parametreleri olarak geçirilen veya out parametreleri veya içinde-out-Parametreler döndürdü dizeleri OLE ayırıcısı kullanarak ayrılması gerekir.
Dize sabitleri Unicode'a OLESTR makro kullanarak derleme zamanında dönüştürülebilir. Örneğin:
başka örnek ANSı/Unicode dönüştürme yordamlar, Visual C++ 4.0 Derleyici ile birlikte gelen Microsoft Foundation Classes (MFC) hizmet (SRV) kaynak kodu bulunamıyor. Bu yordamlar, MFC Teknik Notu 59 içinde açıklanan: 'MFC MBCS/Unicode dönüşümü makroları kullanma'. Tanımı \msdev\mfc\include\afxpriv.h bu makroları OLE2T T2OLE, OLE2CT, T2COLE, A2W, W2A, A2CW, W2CA ve USES_CONVERSION var. Ayrıca \msdev\mfc\src ve kullanımını OLE2T T2OLE, OLE2CT ve T2COLE \msdev\mfc\src MFC kaynak kodundaki MFC kaynak kodundaki AfxA2WHelper ve AfxW2AHelper bakın. Bu işlevler kodu için Unicode veya ANSI olup _UNICODE Önişlemci tanım yapıldı bağlı Derlenecek izin ver. Örneğin, yukarıdaki örnekte CreateFileMoniker çağrısı gibi MFC makrolarla yapılabilir:
T2OLE _UNICODE tanımlanır, aşağıdaki gibi tanımlanır:
T2OLE _UNICODE tanımlanır, aşağıdaki gibi tanımlanır:
T2OLE, T _UNICODE tanımlı değil, bir OLE dizesi (Unicode dizesi) dönüştürülen türü _UNICODE tanımlandığında, bir Unicode dize ve bir ANSI dizesi olduğunu gösterir. Benzer şekilde _UNICODE tanımlanmamışsa, LPTSTR _UNICODE tanımlandığında, bir Unicode dize işaretçisi ve bir ANSI dizesi işaretçisi olarak tanımlanır. _UNICODE tanımlandığında T2OLE herhangi bir dönüştürme yapmaz (LPTSTR LPOLESTR ==). Unicode tanımlandığında, A2W denir. Unicode'a alanı'ndaki bir ANSI dizesi A2W gibi dönüştürür:
dönüştürme yapmak için MultiByteToWideChar AfxA2WHelper kullanır.
MFC makroları dönüştürme, dönüştürülen dizesi için <a1>program</a1> yığından alanı ayırmaya _alloca kullanın. Yordamın çağrısı tamamlandığında, alan otomatik olarak ayırmanın. OLE bir bileşen tarafından ayrılan ve başka tarafından serbest bırakılan tüm dizeler (veri) için kullanılacak OLE ayırıcısı gerektirir. Bu, dizeleri çıkış parametreleri Gözden geçirildi ve,-out-parametrelerinin OLE arabirimleri ile OLE ayırıcısı ayrılmış anlamına gelir. Arayanın boşaltmak için sorumlu olduğundan-Parametreler OLE ayırıcısı ile atanmamış. Çoğu Bağlantı/katıştırma OLE arabirimleri ve API dizeleri içinde-parametre olarak geçirmek. Sonuç olarak MFC dönüştürme makrolar, çoğu durumda kullanılabilir. MFC dönüştürme makroları-out parametreleri veya OLE ayırıcısı kullanarak alan ayırmak için çıkış parametreleri aracılığıyla değerlerini döndürmek için kullanılamaz. AnsiToUnicode ve UnicodeToAnsi bu gibi durumlarda kullanılabilir.
Henüz başka bir Unicode/ANSı dönüştürme yordamlar, Microsoft Systems Journal'da OLE Don Box'ın sütunundaki Ağustos 1995, Vol. 10 No 8 sayfa 86 bulunabilir. Don Box, Unicode/dönüştürülmüş ANSI dizeyi döndürür bir atama işleci ile bir C++ sınıfı tanımlar. Nesne kapsam dışında gittiğinde ayrılan alan otomatik olarak serbest. Bu sınıf, OLE ayırıcısı kullanarak ayrılacak ve, çıkış veya out parametreleri aracılığıyla geçirilen dizeleri için ayrılmış olan alan boşaltmak için değiştirilebilir.
Sınıflar, String16, bir ANSI dizesi, Unicode'a dönüştürür; Don Box'ın sütundan birini izler. Bu bir benzer String8 başka bir sınıf için ANSI, Unicode dönüşümü için kullanılır. Bu sınıf önceki örnekte CreateFileMoniker çağrısından gibi yapılabilir:
yukarıdaki kodu, String16 örneği oluşturulur. Sınıf oluşturucu ANSI dizesi Unicode'a dönüştürür. Dil uygulaması çağıracaktır atama işleci, işletmen const wchar_t *, bu parametre CreateFileMoniker'ın ilk parametre türüne atama. Atama işleci için CreateFileMoniker geçirilen bir Unicode dizesi döndürür. Nesne kapsam dışında gider ile destruct.
Makale numarası: 138813 - Last Review: 16 Mart 2005 Çarşamba - Gözden geçirme: 2.4
Bu makaledeki bilginin uygulandığı durum:
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:138813
(http://support.microsoft.com/kb/138813/en-us/ )