C #- 오류 컴파일 타겟팅 소형 순 프레임 워크 3.5- 메서드에 대한 오버로드 없음 'GetString'테이크 '1'인수

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

문제

실제로 같은 문제에 관한 두 가지 질문이 있지만 관련이 있다고 생각하지 않기 때문에 분리하는 것이 낫다고 생각합니다.

배경 : vb.net에 Windows Mobile 소프트웨어를 작성하고있는 작업 중에는 전자 메일을 보내고 검색하기 위해 메일 서버에 연결해야합니다. 결과적으로 첨부 파일을 얻기 위해 전자 메일을 사용하기 위해서는 마임 파서 (디코딩 및 인코딩)가 필요합니다. 먼저이 문제를 처리하기 위해 작은 "해킹"을 작성할 것이라고 생각했지만 (일반 문자열 파싱 사용) C#로 작성된 프로젝트를 보았습니다. CodeProject에서 솔루션에 구현할 것이라고 생각했습니다. 나는 C#에 대해 많이 알지 못하므로 클래스에서 클래스 라이브러리를 만들어 VB.NET-Project에서 사용했습니다. 이 라이브러리는 일반적인 Windows 컴퓨터의 순 프레임 워크를 목표로 할 때 매우 잘 작동하지만 컴팩트 한 순 프레임 워크를 목표로 동일한 라이브러리를 만들려고 할 때 문제가 발생했습니다. Compact Net Framework에는 더 많은 한계가 있기 때문에 이것은 자연 스럽지만 실제로 많은 오류를 얻지 못했습니다. 코드의 다양한 장소에서 반복되었지만 두 가지만 얻지 못했습니다.

오류 중 하나는이 질문의 주제에 인용 된 오류입니다. 즉 "메소드 'GetString'에 대한 오버로드는 '1'인수를 가져옵니다. 위에서 언급했듯이 C#에 대해 많이 알지 못하므로 온라인으로 오류로 클래스를 VB-NET로 변환했지만 여전히 이해가 안 돼요. 여기에 위의 표시된 오류가 제공되는 기능은 다음과 같습니다.

public virtual string DecodeToString(string s)
{
  byte[] b = DecodeToBytes(s);
  if(m_charset != null)
  {
    //ERROR ON THIS LINE
    return System.Text.Encoding.GetEncoding(m_charset).GetString(b);
  }
  else
  {
    m_charset = System.Text.Encoding.Default.BodyName;
    //ERROR ON THIS LINE
    return System.Text.Encoding.Default.GetString(b);
  }
}

이 클래스에 전체 소스 코드가 필요한 경우이 스레드의 다른 메시지에 게시 할 수 있거나 위에서 언급 한 웹 사이트에서 코드를 다운로드하고 Mimecode라는 클래스를 살펴보면 찾을 수 있습니다. CS.

나를 도울 수있는 사람이 있습니까? 이 문제를 극복하기 위해 어떻게 든 위의 기능을 다시 작성할 수 있습니까?

도와 주셔서 미리 감사드립니다.

친절한 안부와 새해 복 많이 받으세요.

RGDS, MOSTER67

도움이 되었습니까?

해결책

cf .net은 서명을 사용해야합니다 : encoding.getString 메소드 (Array [], int32 index, int32 count)를 사용해보십시오.

...GetString(b, 0, b.Length);

다른 팁

MSDN에서 인코딩 클래스를 찾으면 컴팩트 프레임 워크에서 메소드의 가용성에 대한 정보를 찾을 수 있습니다.

http://msdn.microsoft.com/en-us/library/system.text.encoding.default.aspx

귀하의 경우 System.text.encoding.default 속성은 .NET Compact Framework 3.5, 2.0, 1.0에 의해 지원되므로 모두 설정해야합니다.

그러나 여기가 있습니다. MS는 때때로 클래스 구현에서 메소드를 떨어 뜨리거나 정확한 오버로드가됩니다.

문서를보고 있습니다http://msdn.microsoft.com/en-us/library/system.text.encoding.getstring.aspx .NET 소형 프레임 워크가 인코딩 클래스를 지원하는 반면 일부 과부하가 제거되었다고 아이콘 (왼쪽의 작은 이미지)을 살펴보면 알 수 있습니다.

바이트 [] 배열을 GetString 메소드로 전달하면 해당 오프셋과 int count를 추가해야합니다.

컴팩트 프레임 워크는 아마도 바이트 배열 만 사용하는 과부하를 지원하지 않을 것입니다. 바이트 배열, 시작 색인 및 카운트를 취하는 오버로드를 시도하고 0을 시작 색인으로, B. 길이는 길이로 0을 제공하십시오.

내 질문에 답변 해 주신 Michael, John 및 Rune에게 감사드립니다. 귀하의 제안을 사용하여 문제를 해결했으며 CF.NET 3.5를 타겟팅하는 라이브러리를 컴파일/빌드 할 수있었습니다. 내 질문을 편집하고 더 읽기 쉬운 Ctacke에게도 감사드립니다.

BTW는 첫 번째 게시물에서 언급했듯이 다른 스레드에서 묻는 또 다른 문제가 있었고 CF.NET의 라이브러리를 만들 수 없었던 또 다른 문제가있었습니다.

m_charset = System.Text.Encoding.Default.BodyName;

이 경우 문제는 cf.net이 "bodyname"을 인식하지 못한다는 것입니다. 캐릭터 세트를 사용하는 대체 방법이나 해결 방법을 찾을 수 없었습니다 (BodyName 은이 정보를 검색). 결국 나는 단순히 고정 값 (ISO-8859-1)을 할당했습니다. 이것은 불행히도 라이브러리가 모든 다른 문자 세트를 처리하지는 않지만 적어도 코드가 깨지지 않고 컴파일 할 수 있음을 의미합니다. 어쨌든 내 응용 프로그램이 텍스트 메시지에 신경 쓰지 않기 때문에 충분합니다. 전자 메일을 사용하여 첨부 파일 (Gmail-Drive와 유사하지만 내 공급자와 유사)을받습니다.

다시 한번 감사드립니다.

친절한 안부, Moster67

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top