在indy中将ssl处理程序加载到Imap服务器时发生访问冲突

时间:2015-06-04 08:40:35

标签: delphi ssl imap indy

我正在尝试为TIdServerIOHandlerSSLOpenSSL分配一个TIdImap4Server,但如果我这样做,之后会出现内存泄漏,因为TIdImap4Server会在内部分配自己的IOHandler。

  1. 因此在尝试此操作后关闭程序时会出现Access violation

    Imap4Server.IOHandler := mySSLIOHandler; // mySSLIOHandler is from type TIdServerIOHandlerSSLOpenSSL

  2. 如果我尝试这个就有Access violation

    TIdServerIOHandlerSSLOpenSSL(IMAP4Server.IOHandler).SSLOptions.CertFile := myCertFile; // or any other property of SSLOptions

  3. 有人能建议这个问题的答案吗?

1 个答案:

答案 0 :(得分:1)

Indy中的每个TCP服务器组件(包括TIdImap4Server)都使用在之前已分配给服务器TIdServerIOHandler...属性IOHandler个对象。服务器已激活。只有在激活时 时尚未分配TIdServerIOHandlerStack对象时,才会创建内部TIdServerIOHandler...对象

因此,请确保在设置Imap4Server.IOHandler := mySSLIOHandler之前分配Imap4Server.Active := True (除非您在设计时分配它们,这样做{{1}是安全的只有在所有DFM属性值都已完成流式处理后才会生效。