¿Cómo obtener el tamaño (gratuito, total) de la unidad del teléfono utilizando la API de Nokia?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Quiero obtener el tamaño de la unidad de teléfono. Estoy usando " Nokia-PC-Connectivity ". variables.

Pero cuando utilicé CONA_Folder.Info2 de la siguiente manera:

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) 
  {
  }

Obtengo esta excepción:

  

Se detectó FatalExecutionEngineError   Mensaje: El tiempo de ejecución ha encontrado un   error fatal. La dirección del error.   estaba en 0x7a0ba769, en el hilo 0x1278.   El código de error es 0xc0000005. Esta   error puede ser un error en el CLR o en   las partes inseguras o no verificables   del código de usuario. Fuentes comunes de este   error incluye errores de cálculo de usuario para   COM-interop o PInvoke, que puede   corromper la pila.

Nota: utilizo la plataforma de software S60 . El lenguaje de aplicación es C #.

Para más explicaciones por favor pregúntame.

¿Fue útil?

Solución

Es correcto que obtenga la excepción cuando intenta convertir los datos en el búfer a un tipo de estructura diferente al que fue creado originalmente por CONAFileSystem.CONAFindNextFolder.

Está intentando forzar una estructura de datos de tipo CONADefinitions.CONAPI_FOLDER_INFO en una estructura de tipo CONADefinitions.CONAPI_FOLDER_INFO2. Es casi seguro que tienen diferentes longitudes, etc., por lo que es extremadamente improbable que este método funcione.

A partir de la experiencia con el desarrollo de C ++ en el sistema operativo Symbian, es probable que el patrón que Nokia esté utilizando aquí sea uno en el que posteriormente haya desarrollado una versión más nueva de la API y, por lo tanto, haya creado una versión más nueva de la estructura CONADefinitions.CONAPI_FOLDER_INFO (es decir, CONADefinitions.CONAPI_FOLDER_INFO2).

Suponiendo que esto es correcto, hay 3 probabilidades:
1) Hay un parámetro de enumeración para la primera función que especifica qué versión de la estructura de salida se creará.
2) Hay una nueva función que devuelve la nueva estructura, p. ej. CONAFileSystem.CONAFindFirstFolder2, CONAFileSystem.CONAFindNextFolder2
3) Nokia ha desarrollado la nueva versión internamente, pero aún no la ha lanzado públicamente.

Otros consejos

No sé nada acerca de la API de Nokia, pero en general veo lo siguiente:

  1. Las API de búsqueda suelen tener un FindFirst, seguido de iteraciones de FindNext y luego un FindClose. Veo que llama a FindNext con hFindHandle, pero no veo que se inicialice en ningún lugar (lo que suele suceder en una llamada FindFirst). Si esto es cero, ciertamente podría dar una violación de acceso.
  2. Sin más de tu bucle while () parece un bucle sin fin. ¿Supongo que tienes otro FindNext en alguna parte?
  3. A menudo, las llamadas de búsqueda requieren que la estructura entrante tenga alguna inicialización hecha, como establecer un miembro de longitud. Verifique sus documentos API para ver si se requiere aquí.
  4. No te veo liberando tu variable Buffer o cerrando el identificador de búsqueda (suponiendo que sea válido).
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top