我想要获得手机驱动器的大小。 我正在使用“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#。
如需更多解释,请问我。
答案 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一无所知,但总的来说我看到以下内容: