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.
Bildirim sabiti _MBCS tanımlandığında, belirli bir genel metin yordamı aşağıdaki yordam türlerinden biriyle eşler:
Çok baytlı baytları, karakterleri ve dizeleri uygun şekilde işleyen bir SBCS yordamı. Bu durumda dize bağımsız değişkenlerinin türünde
char*olması beklenir. Örneğin,_tprintfileprintfeşlenir; dize bağımsız değişkenleriprintftüründedirchar*. Dize türleriniz için genel metin veri türünü kullanırsanız_TCHAR, için resmi ve gerçek parametre türleriprintfeşleştirildi çünkü_TCHAR*ile eşleşiyorchar*.MBCS'ye özgü bir yordam. Bu durumda dize bağımsız değişkenlerinin türünde
unsigned char*olması beklenir. Örneğin,_tcsrevtüründe_mbsrevbir dize bekleyen ve döndüren ile eşlerunsigned char*. Dize türleriniz için genel metin veri türünü kullanırsanız_TCHAR, türüyle eşlendiğinden_TCHARcharolası bir tür çakışması vardır.
Bu tür çakışmasını önlemeye yönelik üç çözüm (ve C derleyici uyarıları veya C++ derleyici hataları ortaya çıkar):
Varsayılan davranışı kullanın. tchar.h, aşağıdaki örnekte olduğu gibi çalışma zamanı kitaplıklarındaki yordamlar için genel metin yordamı prototipleri sağlar.
char * _tcsrev(char *);Varsayılan durumda, Libc.lib'deki bir thunk üzerinden harita
_tcsrevprototipi_mbsrev. Bu, gelen parametrelerin_mbsrevtürlerini ve giden dönüş değerini_TCHAR*(diğer bir ifadeylechar *) olarakunsigned char *değiştirir. Bu yöntem, kullanırken_TCHARtür eşleştirmeyi sağlar, ancak işlev çağrısı ek yükü nedeniyle nispeten yavaştır.Kodunuzda aşağıdaki önişlemci deyimini ekleyerek işlev inlining işlevini kullanın.
#define _USE_INLININGBu yöntem, tchar.h dosyasında sağlanan satır içi işlev thunk işlevinin genel metin yordamını doğrudan uygun MBCS yordamıyla eşlemesine neden olur. Aşağıdaki tchar.h kod alıntısı, bunun nasıl yapıldığını gösteren bir örnek sağlar.
__inline char *_tcsrev(char *_s1) {return (char *)_mbsrev((unsigned char *)_s1);}Satır içi eklemeyi kullanabilirseniz, bu en iyi çözümdür çünkü tür eşleştirmeyi garanti eder ve ek zaman maliyeti yoktur.
Kodunuzda aşağıdaki önişlemci deyimini ekleyerek doğrudan eşlemeyi kullanın.
#define _MB_MAP_DIRECTVarsayılan davranışı kullanmak istemiyorsanız veya inlining kullanamıyorsanız, bu yaklaşım hızlı bir alternatif sağlar. Tchar.h dosyasındaki aşağıdaki örnekte olduğu gibi, genel metin yordamının bir makro tarafından doğrudan yordamın MBCS sürümüne eşlenmesine neden olur.
#define _tcschr _mbschrBu yaklaşımı benimsediğinizde, dize bağımsız değişkenleri ve dize dönüş değerleri için uygun veri türlerinin kullanıldığından emin olmanız gerekir. Uygun tür eşleştirmesini sağlamak için tür atamayı veya genel metin veri türünü kullanabilirsiniz
_TXCHAR._TXCHARSBCS koduylachareşler, ancak MBCS koduyla eşleştirunsigned char. Genel metin makroları hakkında daha fazla bilgi için Bkz. Çalışma Zamanı Kitaplığı Başvurusu'nda Genel Metin Eşlemeleri.