سؤال

لقد وجدت هذا السطر من الكود عند ترقية مشروع منشئ C ++ إلى Rad Studio 2009:

mProcessLength->Text.printf("%d",mStreamLength);

لا يتم تجميعها في عام 2009 ، ولكن ما هو نية هذا الخط وما هو أفضل ما يعادل؟ بشرط mProcessLength->Text هو الآن wchar_t*.

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

المحلول

أظن أنك تحصل على هذه الأخطاء:

E2034 Cannot convert 'const char *' to 'const wchar_t *'
E2342 Type mismatch in parameter 'format' (wanted 'const wchar_t *', got 'const char *')

إنها المعلمات التي تمررها للطباعة غير متطابقة. تغييره إلى:

mProcessLength->Text.printf(L"%d",mStreamLength);

سوف يغير سلسلة حرفيك إلى النوع الصحيح.

نصائح أخرى

هناك احتمالات جيدة أن يتم التعامل مع WCHAR كنوع سلسلة VCL أحادي الولادة. يحتوي على وظيفة printf تأخذ وسيطات printf قياسية باستثناء المؤشر إلى السلسلة. تمتلئ Unicodestring نفسه بالسلسلة المنسقة.

Unicodestring printf

لذلك يتم إنشاء أحادي الوسيط على المكدس تلقائيًا ويتم استدعاء طريقة printf ، ثم يتم تعبئة المؤشر مرة أخرى في WCHAR.

ربما تريد wsprintf ... يبدو أن ذلك كان في الأصل بعض الفصول مع وظيفة عضو تسمى printf ، والتي ربما نقلت للتو معلماتها إلى wvsprintf.

في ملاحظة جانبية ، على افتراض أن النص هو خاصية ، فإن استدعاء printf () عليها لن يؤدي إلى رفع العقار بالقيمة الجديدة. يحتوي كل من ANSistring و UnicodeString على مُنشئين لتنسيق القيم الرقمية ، بحيث يمكن استخدام ما يلي بدلاً من ذلك ، في جميع إصدارات C ++ باني بالتساوي:

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