如何使用诺基亚API获取手机驱动器的大小(免费,总计)?

时间:2009-01-03 18:02:54

标签: c# mobile nokia

我想要获得手机驱动器的大小。 我正在使用“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 software platform。应用程序语言是C#。

如需更多解释,请问我。

2 个答案:

答案 0 :(得分:1)

当您尝试将缓冲区中的数据转换为与最初由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)诺基亚已在内部开发新版本但尚未公开发布。

答案 1 :(得分:0)

我对诺基亚API一无所知,但总的来说我看到以下内容:

  1. 查找API通常具有FindFirst,然后是FindNext的迭代,然后是FindClose。我看到你用hFindHandle调用FindNext,但我没有看到它在任何地方被初始化(这通常发生在FindFirst调用中)。如果这是零,那肯定会导致访问冲突。
  2. 如果没有更多的while()循环,它看起来像一个无限循环 - 我假设你在某个地方有另一个FindNext?
  3. 经常查找调用要求传入的结构已完成一些初始化 - 比如设置长度成员。检查您的API文档,看看这是否需要。
  4. 我没有看到你释放你的Buffer变量或关闭find句柄(假设它是有效的)。