簡體   English   中英

如何使用諾基亞API獲取手機驅動器的大小(免費,總計)?

[英]How to get the size (free,total) of phone drive using Nokia API?

我想得到手機驅動器的大小。 我正在使用“Nokia-PC-Connectivity”。和文件系統API一樣,我在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消息:運行時遇到致命錯誤。 錯誤的地址位於線程0x1278處的0x7a0ba769處。 錯誤代碼是0xc0000005。 此錯誤可能是CLR中的錯誤,也可能是用戶代碼的不安全或不可驗證部分中的錯誤。 此錯誤的常見來源包括COM-interop或PInvoke的用戶編組錯誤,這可能會破壞堆棧。

注意:我使用S60軟件平台 應用程序語言是C#。

有關更多解釋,請問我。

當您嘗試將緩沖區中的數據轉換為與最初由CONAFileSystem.CONAFindNextFolder創建的結構類型不同的結構時,您獲得異常是正確的。

您正在嘗試將CONADefinitions.CONAPI_FOLDER_INFO類型的數據結構強制轉換為CONADefinitions.CONAPI_FOLDER_INFO2類型的結構。 它們幾乎肯定有不同的長度等等,所以這種方法極不可能有效。

根據Symbian OS上的C ++開發經驗,諾基亞可能會在這里使用的模式是他們隨后開發了更新版本的API,因此創建了更新版本的CONADefinitions.CONAPI_FOLDER_INFO結構(即CONADefinitions.CONAPI_FOLDER_INFO2) )。

假設這是正確的,有3種可能性:
1)第一個函數有一個枚舉參數,用於指定要創建哪個版本的輸出結構。
2)有一個新函數返回新結構,例如CONAFileSystem.CONAFindFirstFolder2,CONAFileSystem.CONAFindNextFolder2
3)諾基亞已在內部開發新版本但尚未公開發布。

我對諾基亞API一無所知,但總的來說我看到以下內容:

  1. 查找API通常具有FindFirst,然后是FindNext的迭代,然后是FindClose。 我看到你用hFindHandle調用FindNext,但我沒有看到它在任何地方被初始化(這通常發生在FindFirst調用中)。 如果這是零,那肯定會導致訪問沖突。
  2. 沒有更多的while()循環,它看起來像一個無限循環 - 我假設你在某處有另一個FindNext?
  3. 通常查找調用要求傳入的結構已完成一些初始化 - 比如設置長度成員。 檢查您的API文檔,看看這是否需要。
  4. 我沒有看到你釋放你的Buffer變量或關閉find句柄(假設它是有效的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM