شارلور مع دول مجلس التعاون الخليجي
-
19-09-2019 - |
سؤال
أحاول تحويل التعليمات البرمجية التالية من MSVC إلى دول مجلس التعاون الخليجي
# Define LTolower (Ch) Charlower ((LPSTR) (UCHAR) (CH)) Char * GEL؛ * الفصول = (char) ltolower (* الفصول)؛
يعطي هذا الرمز خطأ مترجم: يلقي من "char *" إلى "Char" يفقد الدقة
فهمي هو أن أسطوائي (int) من C لن يحول السلسلة بأكملها. شكرا.
المحلول
يلقي الخاص بك في شارلور هو رفع هذا الخطأ. قبل القيام بذلك، تحتاج إلى تعيين بايت الترتيب العالي من المؤشر المري شارلور يساوي الصفر.
من مرجع MSDN على الوظيفة:
إذا كانت المعامل سلسلة أحرف، فإن الدالة ترجع مؤشر إلى السلسلة المحولة. نظرا لأن السلسلة يتم تحويلها في مكانها، فإن قيمة الإرجاع تساوي LPSZ.
إذا كانت المعامل شخصية واحدة، فستكون قيمة الإرجاع قيمة 32 بت من كلمة ترتيبها عالية الصفر، ويحتوي كلمة منخفضة الترتيب على الحرف المحول.
شيء مثل هذا قد يعمل:
#define ltolower(ch) CharLower(0x00ff & ch)
إذا كنت تستخدم مترجم C ++، فقد تحتاج أيضا إلى مشغل يلقي:
#define ltolower(ch) CharLower((LPTSTR)(0x00ff & ch))
لم يختبرها على الرغم من ...