如何使用诺基亚API获取手机驱动器的大小(免费,总计)?
题
我想要获得手机驱动器的大小。 我正在使用“Nokia-PC-Connectivity”,并且对于我在CONADifinition函数上找到的文件系统API,名为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一无所知,但总的来说我看到以下内容:
- 查找API通常具有FindFirst,然后是FindNext的迭代,然后是FindClose。我看到你用hFindHandle调用FindNext,但我没有看到它在任何地方被初始化(这通常发生在FindFirst调用中)。如果这是零,那肯定会导致访问冲突。
- 如果没有更多的while()循环,它看起来像一个无限循环 - 我假设你在某个地方有另一个FindNext?
- 经常查找调用要求传入的结构已完成一些初始化 - 比如设置长度成员。检查您的API文档,看看这是否需要。
- 我没有看到你释放你的Buffer变量或关闭find句柄(假设它是有效的)。 醇>