كيفية الحصول على الحجم (المجاني والإجمالي) لمحرك الهاتف باستخدام Nokia API؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

أريد الحصول على حجم محرك الهاتف.أنا أستخدم "Nokia-PC-Connectivity"، وفيما يتعلق بواجهة برمجة تطبيقات نظام الملفات وجدت في وظيفة CONADifinition تسمى CONA_Folder_Info ولكن هذه الوظيفة لا تدعم FreeSize وTotal Size ولكن هناك CONA_Folder.Info2 ومثيلها يدعم هذه المتغيرات .

ولكن عندما استخدمت CONA_Folder.Info2 على النحو التالي:

CONADefinitions.CONAPI_FOLDER_INFO2 FolderInfo;
int iResult = 0;// Allocate memory for buffer
IntPtr Buffer = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(CONADefinitions.CONAPI_FOLDER_INFO2)));                      
iResult = CONAFileSystem.CONAFindNextFolder(hFindHandle, Buffer);
while (iResult == PCCSErrors.CONA_OK )
{
  FolderInfo = (CONADefinitions.CONAPI_FOLDER_INFO2)Marshal.PtrToStructure(Buffer,    typeof(CONADefinitions.CONAPI_FOLDER_INFO2));
  if (FolderInfo.pstrName[0].ToString() != "C" && level == 0) 
  {
  }

أحصل على هذا الاستثناء:

تم اكتشاف رسالة fatalexecutionengineerror:واجه وقت التشغيل خطأ فادح.كان عنوان الخطأ في 0x7a0ba769 ، على موضوع 0x1278.رمز الخطأ هو 0xc0000005.قد يكون هذا الخطأ خطأ في CLR أو في الأجزاء غير الآمنة أو غير القابلة للتحرير من رمز المستخدم.تشمل المصادر الشائعة لهذا الخطأ أخطاء حشط المستخدم لـ COM-Interop أو Pinvoke ، والتي قد تفسد المكدس.

ملحوظة:انا استعمل ال منصة البرمجيات S60.لغة التطبيق هي C#.

لمزيد من التوضيحات يرجى سؤالي.

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

المحلول

وصحيح أن تحصل على استثناء عند محاولة تحويل البيانات في المخزن المؤقت إلى نوع مختلف من هيكل من تم إنشاؤه أصلا CONAFileSystem.CONAFindNextFolder.

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

ومن الخبرة مع C ++ التطوير على نظام التشغيل سيمبيان، ونمط نوكيا من المحتمل أن تكون باستخدام هنا هو واحد حيث أنها وضعت في وقت لاحق إلى نسخة أحدث من API وهكذا خلقت نسخة أحدث من هيكل CONADefinitions.CONAPI_FOLDER_INFO (أي CONADefinitions.CONAPI_FOLDER_INFO2).

وعلى افتراض هذا هو الصحيح هناك 3 احتمالاتها:
1) وهناك معلمة التعداد إلى الوظيفة الأولى التي تحدد أي إصدار من هيكل الناتج هو المراد إنشاؤه. الصفحة 2) هناك وظيفة جديدة والتي ترجع الهيكل الجديد على سبيل المثال CONAFileSystem.CONAFindFirstFolder2، CONAFileSystem.CONAFindNextFolder2 الصفحة 3) وقد وضعت نوكيا النسخة الجديدة داخليا ولكن لم يتم الإفراج عنه علنا.

نصائح أخرى

لا أعرف شيئًا عن Nokia API، لكن بشكل عام أرى ما يلي:

  1. عادةً ما تحتوي واجهات برمجة تطبيقات البحث على FindFirst، متبوعة بتكرارات FindNext ثم FindClose.أرى أنك تتصل بـ FindNext باستخدام hFindHandle، ولكن لا أرى أنه يتم تهيئته في أي مكان (وهو ما يحدث عادةً في مكالمة FindFirst).إذا كانت هذه القيمة صفرًا، فمن المؤكد أن ذلك قد يؤدي إلى حدوث انتهاك للوصول.
  2. بدون المزيد من حلقة while() الخاصة بك، تبدو وكأنها حلقة لا نهاية لها - أفترض أن لديك FindNext آخر في مكان ما؟
  3. غالبًا ما تتطلب مكالمات البحث إجراء بعض التهيئة للبنية الواردة - مثل تحديد طول العضو.تحقق من مستندات API الخاصة بك لمعرفة ما إذا كان ذلك مطلوبًا هنا.
  4. لا أرى أنك تحرر متغير Buffer الخاص بك أو تغلق مقبض البحث (على افتراض أنه صالح).
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top