Nokia API를 사용하여 전화 드라이브의 크기 (무료, 총)를 얻는 방법은 무엇입니까?
문제
전화 드라이브의 크기를 얻고 싶습니다. "Nokia-PC-Connectivity"를 사용하고 있습니다. 그리고 파일 시스템 API와 관련하여 ConaDifinition 함수에서 찾은 CONA_Folder_Info에서 찾은이 기능은 FreeSize 및 Total Size.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 ++ 개발 경험에서 Nokia가 여기에서 사용할 가능성이있는 패턴은 이후에 API의 최신 버전을 개발 한 곳으로 ConadeFinitions.conapi_folder_info 구조 (IE ConadeFinitions.conapi_folder_info2의 최신 버전을 만들었습니다. ).
이것이 올바른 것으로 가정하면 3 가지 가능성이 있습니다.
1) 첫 번째 함수에는 열거 매개 변수가 있습니다.
2) 새로운 구조를 반환하는 새로운 기능이 있습니다.
3) Nokia는 내부적으로 새 버전을 개발했지만 아직 공개적으로 출시되지 않았습니다.
다른 팁
나는 Nokia API에 대해 아무것도 모르지만 일반적으로 다음을 본다.
- Find API에는 일반적으로 FindFirst가 있고 FindNext의 반복 및 FindClose가 있습니다. 나는 당신이 hfindhandle로 findnext를 호출하는 것을 보지만, 어디에서나 초기화되는 것을 보지 못합니다 (일반적으로 findfirst 호출에서 발생합니다). 이것이 0이면 확실히 액세스 위반을 줄 수 있습니다.
- 더 이상 당신의 While () 루프가 없으면 끝없는 루프처럼 보입니다. 어딘가에 또 다른 findnext가 있다고 생각합니까?
- 종종 전화를 찾으려면 들어오는 구조물에 길이 멤버를 설정하는 것과 같은 초기화가 완료되어야합니다. API 문서에서 여기에서 필요한지 확인하십시오.
- 버퍼 변수를 자유롭게하거나 찾기 핸들을 닫는 것을 보지 못합니다 (유효하다고 가정).