Nokia API를 사용하여 전화 드라이브의 크기 (무료, 총)를 얻는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/409487

  •  03-07-2019
  •  | 
  •  

문제

전화 드라이브의 크기를 얻고 싶습니다. "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에 대해 아무것도 모르지만 일반적으로 다음을 본다.

  1. Find API에는 일반적으로 FindFirst가 있고 FindNext의 반복 및 FindClose가 있습니다. 나는 당신이 hfindhandle로 findnext를 호출하는 것을 보지만, 어디에서나 초기화되는 것을 보지 못합니다 (일반적으로 findfirst 호출에서 발생합니다). 이것이 0이면 확실히 액세스 위반을 줄 수 있습니다.
  2. 더 이상 당신의 While () 루프가 없으면 끝없는 루프처럼 보입니다. 어딘가에 또 다른 findnext가 있다고 생각합니까?
  3. 종종 전화를 찾으려면 들어오는 구조물에 길이 멤버를 설정하는 것과 같은 초기화가 완료되어야합니다. API 문서에서 여기에서 필요한지 확인하십시오.
  4. 버퍼 변수를 자유롭게하거나 찾기 핸들을 닫는 것을 보지 못합니다 (유효하다고 가정).
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top