Wie man die Größe (frei, total) von Telefon-Laufwerk mit Nokia API zu bekommen?

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich möchte die Größe des Telefons Laufwerk bekommen. Ich verwende „Nokia-PC-Konnektivität“., Und in Bezug System API I auf CONADifinition Funktion gefunden Datei namens CONA_Folder_Info aber diese Funktion doens't Freesize und Gesamtgröße unterstützen, aber es gibt CONA_Folder.Info2 und seine Instanz diese Variablen unterstützen .

Aber wenn ich CONA_Folder.Info2 wie folgt verwendet:

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

Ich erhalte diese Ausnahme:

  

FatalExecutionEngineError nachgewiesen   Meldung: Die Laufzeit gestoßen ein   fataler Fehler. Die Adresse des Fehlers   bei 0x7a0ba769 war, auf Faden 0x1278.   Der Fehlercode ist 0xc0000005. Diese   Fehler kann ein Fehler in der CLR oder in   die unsicheren oder nicht überprüfbare Bereiche   von Benutzercode. Häufige Quellen dieser   Fehler gehören Benutzer Serialisieren Fehler für   COM-interop oder PInvoke, die gegebenen   korrupt der Stapel.

Hinweis: Ich verwende die S60 Softwareplattform . Anwendungssprache ist C #.

Für weitere Erklärungen bitte fragen Sie mich.

War es hilfreich?

Lösung

Es ist richtig, dass Sie die Ausnahme erhalten, wenn Sie die Daten in dem Puffer zu einer anderen Art von Struktur versuchen und wandeln als ursprünglich von CONAFileSystem.CONAFindNextFolder erstellt.

Sie versuchen, eine Datenstruktur vom Typ CONADefinitions.CONAPI_FOLDER_INFO in eine Struktur vom Typ CONADefinitions.CONAPI_FOLDER_INFO2 zu erzwingen. Sie haben an Sicherheit grenzender Wahrscheinlichkeit unterschiedliche Längen und so weiter, so dass ihre äußerst unwahrscheinlich, diese Methode würde jemals funktionieren.

Aus der Erfahrung mit C ++ Entwicklung auf dem Symbian OS, das Muster Nokia sind wahrscheinlich hier zu sein mit ist eine, wo sie anschließend eine neuere Version der API entwickelt und haben so eine neuere Version der CONADefinitions.CONAPI_FOLDER_INFO Struktur erstellt (dh CONADefinitions.CONAPI_FOLDER_INFO2).

Unter der Annahme, dies richtig ist, gibt es drei Wahrscheinlichkeiten:
1) Es gibt eine ENUM-Parameter an die erste Funktion, die die Version der Ausgangsstruktur spezifiziert ist, geschaffen werden.
2) Es ist eine neue Funktion, die die neue Struktur liefert z.B. CONAFileSystem.CONAFindFirstFolder2, CONAFileSystem.CONAFindNextFolder2
3) Nokia hat die neue Version intern entwickelt, aber noch nicht öffentlich freigegeben.

Andere Tipps

Ich weiß nichts über den Nokia-API, aber im Allgemeinen sehe ich folgende:

  1. Suchen APIs hat in der Regel einen Findfirst, gefolgt von Iterationen von Findnext und dann einem Findclose. Ich sehe dich mit hFindHandle Aufruf Suche, aber ich sehe es nicht überall initialisiert zu werden (was in der Regel in einem Findfirst Aufruf geschieht). Wenn diese Null ist, dass sicherlich eine Zugriffsverletzung geben könnte.
  2. Ohne mehr Ihrer while () Schleife es wie eine endlose Schleife aussieht - ich nehme an, Sie haben eine andere Suchen irgendwo
  3. ?
  4. Oft finden Anrufe verlangen, dass die eingehende Struktur einig Initialisierung getan hat - wie eine Länge Mitglied Einstellung. Überprüfen Sie die API-Dokumentation zu sehen, ob das hier erforderlich ist.
  5. Ich sehe nicht, Sie Ihre Buffer Variable oder Schließen der Fund Griff zu befreien (vorausgesetzt, es ist gültig).
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top