我实际上对同一个问题有两个问题,但我认为最好将它们分开,因为我认为它们并不相关。

背景: 我正在VB.NET中编写一个Windows Mobile软件,其中任务需要连接到邮件服务器以发送和检索电子邮件。因此,我还需要一个Mime解析器(用于解码和编码)电子邮件以获取附件。首先我想,我会写一个小的“黑客”。处理这个问题(使用普通的字符串解析)但后来我看到了一个用C#编写的项目,在CodeProject ,我认为我会在我的解决方案中实现。我对C#了解不多,所以我只是从类中创建了一个类库,并在我的VB.NET项目中使用它。当我在普通的Windows计算机上瞄准Net Framework时,这个库工作得非常好,但当我打算制作针对Compact Net Framework的同一个库时,我遇到了麻烦。这是很自然的,因为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索引,Int32计数)所以请尝试使用:

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

其他提示

如果在MSDN上查找Encoding类,您将在紧凑框架中找到有关方法可用性的信息。

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

在您的情况下,.NET Compact Framework 3.5,2.0,1.0支持System.Text.Encoding.Default属性,因此您应该全部设置。

但事情就是这样。 MS有时从类实现中删除方法,或者精确重载。

查看文档 http://msdn.microsoft.com/en- us / library / system.text.encoding.getstring.aspx 你可以通过查看图标(左边的小图片)看出,当.NET Compact Framework支持编码类时,一些重载被删除了。 / p>

当你将byte []数组传递给GetString方法时,它找不到那个重载,所以你必须添加一个int offset和int count。

紧凑框架可能不支持仅占用字节数组的重载。尝试使用字节数组,起始索引和计数的重载,并将其作为起始索引为0,将b.Length作为长度。

感谢Michael,John和Rune回答我的问题。通过使用您的建议,我解决了问题,并设法编译/构建面向CF.NET 3.5的库。还要感谢ctacke编辑我的问题并使其更具可读性。

顺便说一句,正如我在第一篇文章中提到的,我还有另一个问题,我打算在另一个帖子中提出这个问题并且不允许我为CF.NET构建库,即行:

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

在这种情况下,问题是CF.NET无法识别“BodyName”。我找不到任何替代方法或变通方法来获取所使用的字符集(BodyName检索此信息),所以最后我只是为它分配了一个固定值(iso-8859-1)。这意味着遗憾的是,库不会处理所有不同的字符集,但至少代码不会中断,我能够编译它。在任何情况下,对我而言,这已经足够,因为我的应用程序不关心文本消息 - 它使用电子邮件发送和获取附件(类似于Gmail驱动器,但我自己的提供商)。

再次感谢你。

亲切的问候, moster67

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top