ج # - خطأ تجميع استهداف ضغط الإطار الصافي 3.5 - لا الزائد لأسلوب "GetString" يأخذ الحجج "1"

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

سؤال

وأنا فعلا سؤالين بخصوص نفس المشكلة ولكن أعتقد أنه من الأفضل أن تفصل بينهما منذ لا أعتقد أنها ذات الصلة.

والخلفية: وأنا أكتب برنامج ويندوز موبايل في VB.NET الذي يحتاج بين مهامها للاتصال خادم البريد لإرسال واسترجاع رسائل البريد الإلكتروني. ونتيجة لذلك، وأنا أيضا في حاجة إلى مايم-محلل (لفك التشفير والترميز) رسائل البريد الإلكتروني من أجل الحصول على المرفقات. البداية اعتقدت، أود أن أكتب صغيرة "الإختراق" للتعامل مع هذه المسألة (باستخدام العاديين سلسلة التوزيع) ولكن بعد ذلك رأيت المشروع، وكتب في C #، <وأ href = "http://www.codeproject.com/KB /cs/MIME_De_Encode_in_C_.aspx؟fid=209566&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=1202157 "يختلط =" نوفولو noreferrer "> في CodeProject حيث اعتقدت انني سوف تنفذ في بلدي الحل. أنا لا أعرف الكثير عن C # لذلك أنا ببساطة جعل مكتبة فئة من الفئات واستخدامه في بلدي VB.NET المشروع. تعمل هذه المكتبة لطيف جدا وأنا عندما تستهدف صافي الإطارية بشأن العادية ويندوز أجهزة الكمبيوتر ولكن عندما كنت ذاهبا لجعل نفس المكتبة التي تستهدف صافي الإطار المدمجة، جريت إلى المتاعب. وهذا أمر طبيعي لأن الإطار الصافي الاتفاق لديها أكثر من حدود لكنني في الواقع لم يحصل أن العديد من الأخطاء - اثنين فقط على الرغم من أن تتكرر في أماكن مختلفة في رمز

واحدة من الأخطاء هو واحد استشهد في هذا الموضوع في هذه المسألة أي "لا الزائد ل 'GetString" أسلوب يأخذ الحجج "1". وكما ذكر أعلاه، وأنا لا أعرف الكثير عن C # لذلك أنا تحويلها الطبقة مع الخطأ على الانترنت في VB-NET ولكن ما زلت لا أفهم كثيرا .. وهنا هي وظيفة التي تعطي فوق ضلال مبين:

public virtual string DecodeToString(string s)
{
  byte[] b = DecodeToBytes(s);
  if(m_charset != null)
  {
    //ERROR ON THIS LINE
    return System.Text.Encoding.GetEncoding(m_charset).GetString(b);
  }
  else
  {
    m_charset = System.Text.Encoding.Default.BodyName;
    //ERROR ON THIS LINE
    return System.Text.Encoding.Default.GetString(b);
  }
}

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

وأي شخص يمكن أن تساعدني؟ يمكنني كتابة الدالة أعلاه بطريقة أو بأخرى للتغلب على هذه المشكلة؟

وأشكركم مقدما على مساعدتكم.

وأطيب التحيات وسنة جديدة سعيدة لكم جميعا.

وRGDS، moster67

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

المحلول

وCF. NET يتطلب منك استخدام التوقيع: Encoding.GetString أسلوب (مجموعة []، مؤشر Int32، Int32 العد) لذلك حاول استخدام:

...GetString(b, 0, b.Length);

نصائح أخرى

إذا قمت بالبحث الطبقة ترميز على MSDN ستجد معلومات حول توفر الأساليب في إطار الاتفاق.

http://msdn.microsoft.com /en-us/library/system.text.encoding.default.aspx

في قضيتك يتم اعتماد خاصية System.Text.Encoding.Default من ضغط .NET Framework 3.5، 2.0، 1.0 لذلك يجب أن تكون كل مجموعة.

ولكن هنا هو الشيء. MS أحيانا تسقط من الأساليب من تطبيق فئة، أو أن يكون الزائدة دقيقة.

وإذا نظرنا إلى وثائق http://msdn.microsoft.com/en- لنا / مكتبة / system.text.encoding.getstring.aspx يمكن أن أقول لكم من خلال النظر في الرموز (الصور الصغيرة إلى اليسار) في حين أن يدعم .NET Framework ضغط الطبقة الترميز، وبعض الزائدة حصلت على إزالتها.

عند تمرير بايت [] مجموعة لطريقة GetString، فإنه لا يمكن أن تجد الزائد بحيث يكون لديك لإضافة كثافة تعويض وعدد كثافة العمليات.

والإطار المدمجة ربما لا يدعم الحمل الزائد الذي يستغرق سوى مجموعة بايت. محاولة الحمل الزائد الذي يأخذ صفيف بايت، وهو مؤشر بداية والعد واعطائها 0 حيث أن مؤشر بداية وb.Length وطول.

وبفضل مايكل جون ورون للرد على سؤالي. باستخدام اقتراحاتك، I حل المشكلة، وتمكنت من تجميع / بناء مكتبة استهداف CF.NET 3.5. وذلك أيضا بفضل ctacke لتحرير سؤالي وجعلها أكثر قابلية للقراءة.

وراجع للشغل، على النحو المذكور في أول وظيفة، وكان لي مشكلة أخرى الذي قصدته أن نسأل في موضوع آخر، والتي لا تسمح لي لبناء مكتبة للCF.NET، وهي السطر:

m_charset = System.Text.Encoding.Default.BodyName;

في هذه الحالة، فإن المشكلة هي أن CF.NET لا تعترف "BodyName". لم أجد أي وسائل أو الحلول البديلة للحصول على مجموعة الأحرف المستخدمة (BodyName يسترد هذه المعلومات) حتى في النهاية أنا مجرد تعيينه قيمة ثابتة (ISO-8859-1). وهذا يعني للأسف أن المكتبة سوف يتم معالجة كافة مختلفة الطابع مجموعات ولكن هناك ما لا يقل عن ورمز لا كسر وكنت قادرا على ترجمة عليه. في أي حال، بالنسبة لي هذا يكفي لأن طلبي لا يهتمون-رسائل نصية - انها تستخدم رسائل البريد الإلكتروني لإرسال والحصول على مرفقات (مماثلة إلى Gmail دافع ولكن مع مقدم الخاصة)

.

وشكرا لك مرة أخرى.

مع أطيب التحيات، moster67

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