التعامل مع TCHARs في رأس الملفات للمكتبات مع مجموعات أحرف مختلفة

StackOverflow https://stackoverflow.com/questions/813898

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي مشروع يستخدم مكتبتين طرف ثالث، وكلاهما الاستفادة من TCHARs في رأس الملفات الخاصة بهم. للأسف امتثلت مكتبة واحدة كما متعددة البايت (نسميها المكتبة)، ويتم تصنيف الآخر ك Unicode (يطلق عليه ب مكتبة).

والآن الطريق وأنا أفهم ذلك هو أن يتم استبدال TCHAR من قبل precompiler مع أي wchar أو شار اعتمادا على خيارات بناء. لذلك عندما تم تصنيف المكتبة لديها أي أسلوب يأخذ معلمة من نوع TCHAR كان من المقرر أن توقع معلمة من نوع شار، ويتم تعيين الأساليب في مكتبة ب أن نتوقع معلمة من نوع wchar.

ومما يؤسف له تطبيق مضيعة بلدي لديه لاختيار مجموعة الأحرف أيضا. إذا كنت اختيار يونيكود ثم ملف الرأس ولقد تضمنت لالمكتبة يقول لي أن الطريقة يريد wchar، لأنني عندما تجميع TCHARs في رأس تفسر على أنها wchars. وهذا يشمل TCHARS تعريفها داخل الهياكل. لقد أكد هذا السلوك في الواقع، عندما كنت تخصيص واجتياز حاجز TCHAR أعود القمامة لأنها تملأ عازلة wchar بلدي مع البيانات المتعددة البايت.

وأسئلتي هي: هل هناك طريقة نظيفة لتستهلك كل من هذه المكتبات في نفس التطبيق؟ أنا ربما تفعل شيئا خاطئا مع كيف أستخدم هذه المكتبات؟

هل كانت مفيدة؟

المحلول

وعلى افتراض انك لا تستخدم الكثير من الدرجة / وظيفة في أي واحدة من هذه المكتبات، وأود أن التفاف واحدة من مكتبة تماما. دعنا نقول إذا قرر استخدام على mbc في التطبيق والتفاف ب مكتبة (يونيكود)، يمكن أن ملف رأس المجمع الخاص بك استخدام wchar_t بدلا من TCHAR ذلك سوف لن يؤثر على رقم تعريف واجهة الخاص بك. داخل ملف حزب الشعب الكمبودي المجمع الخاص بك حيث كنت # تضمين رؤوس ب المكتبة، وكنت رقم تعريف TCHAR لتتناسب ب المكتبات. يجب ألا يسمح لأي رمز آخر من المجمع لمعرفة ب المكتبات.

إذا كنت تستخدم أكثر من فئة قليلة / وظيفة في كل من هذه المكتبات، والحفاظ على رمز المجمع سوف تصبح بسرعة مشكلة من تلقاء نفسها.

نصائح أخرى

شينغ ييب اقترح ، والتفاف أفضل الفرق في API الخاصة بك. وهذا يجعل أكواد مستقلة المصدر منه.

ووAPI التفاف ثم أن تحويل الأحرف من الترميز الخاص بك إلى المكتبة. على النوافذ، وأنا لديك وظائف دعا WideCharToMultiByte وما شابه ذلك.

وأعتقد أن الخيار الأفضل هو اختيار إما المكتبة أو مكتبة ب (سنقول المكتبة لديها في هذا المثال) وسيلة للقيام بذلك. ثم عند تضمين الملفات ب رأس المكتبة، تأكد من أنك تعرف # / # نديف أيا كان ب مكتبة جمعت مع. ثم لديك للتأكد من تحويل بين المكتبة والمكتبة ب في أي وقت أنها تستخدم نفس البيانات.

وسيكون حقا أفضل إذا كنت قد جمعت الحصول عليها بنفس الطريقة. وإلا فإنه سيكون من الفوضى جدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top