2013-03-30 29 views
-1

有人可以幫助我從這個代碼,以C++ Builder的翻譯線:翻譯德爾福收集到C++ Builder代碼(TIdPOP3)

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然後...這裏的東西...和PlainText作爲最後一個。

+0

'POP3Client> SASLMechanisms>添加> SASL =(TIdSASL *)con_sasl_anonymous;' – TLama

+0

這是行不通的,因爲Add(TIdSASListEntry *)是一個函數 - 它期望'TIdSASListEntry *'作爲參數,所以上面的代碼可能有問題嗎? – Coder12345

+1

「添加」真的是一個帶參數的方法嗎?我不知道,只是看着'TCollection'類的['Add'](http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TCollection.Add)方法,它不會' t期望任何參數(也許Indy擁有基於不同類的'TIdSASLEntries',我不知道)。無論如何,該代碼是不安全的,因爲添加該集合項可能會失敗,並且您可能訪問不存在的對象。更安全的是有一個變量,您將存儲添加的收集項目。這可能是['這種方式](http://pastebin.com/hz4NLap2)。 – TLama

回答

3

對於未來的Google - 感謝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); 
+1

假設'con_sasl_anonymous'是一個'TIdSASLAnonymous'組件,那麼根本不需要類型轉換(原始的DElphi代碼不需要進行類型轉換):'se-> SASL = con_sasl_anonymous;'' –