【问题标题】:Translating Delphi collection to C++ Builder code (TIdPOP3)将 Delphi 集合转换为 C++ Builder 代码 (TIdPOP3)
【发布时间】:2013-03-30 21:23:24
【问题描述】:

谁能帮我把这段代码中的一行翻译成 C++ Builder:

http://blog.onkeysoft.com/2011/04/20/how-to-prepare-a-connection-to-pop3-server-with-indy-tidpop3/

在这行之前我做得很好:

 POP3Client.SASLMechanisms.Add.SASL := tidsasl(con_sasl_anonymous);

其他问题 - 是否有一个“好的”SASL 机制可供尝试 - 从最安全到最不安全?换句话说,它们的好顺序是什么?我会先尝试使用 SHA1,然后是 MD5,然后……这里有一些东西……最后一个是纯文本。

【问题讨论】:

  • POP3Client>SASLMechanisms>Add>SASL = (TIdSASL*)con_sasl_anonymous;
  • 这不起作用,因为 Add(TIdSASListEntry *) 是一个函数 - 它需要 TIdSASListEntry * 作为参数,所以上面的代码可能有问题?
  • Add 真的是带参数的方法吗?我不知道,只看TCollection类的Add方法,它没有期望任何参数(可能Indy有基于不同类的TIdSASLEntries,我不知道)。无论如何,该代码是不安全的,因为添加该集合项可能会失败,并且您可能会访问不存在的对象。更安全的是有一个变量来存储添加的集合项目。可能是this way
  • 是的,你是对的...(TIdSASLListEntry*) 是来自Add() 函数的返回参数,它不需要参数!不敢相信我没有注意到这一点。现在一切正常!谢谢!

标签: delphi c++builder indy


【解决方案1】:

对于未来的谷歌员工 - 感谢 TLama:

TIdSASLListEntry *se = POP3Client->SASLMechanisms->Add();
se->SASL = (TIdSASL*)con_sasl_anonymous;

或者,如果您更喜欢 C++ 风格的演员表:

TIdSASLListEntry *se = POP3Client->SASLMechanisms->Add();
se->SASL = static_cast<TIdSASL*>(con_sasl_anonymous);

【讨论】:

  • 假设 con_sasl_anonymous 是一个 TIdSASLAnonymous 组件,那么你根本不需要类型转换(原始的 DElphi 代码也不需要类型转换):se-&gt;SASL = con_sasl_anonymous;
猜你喜欢
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
相关资源
最近更新 更多