我正在尝试为TIdServerIOHandlerSSLOpenSSL
分配一个TIdImap4Server
,但如果我这样做,之后会出现内存泄漏,因为TIdImap4Server
会在内部分配自己的IOHandler。
因此在尝试此操作后关闭程序时会出现Access violation
:
Imap4Server.IOHandler := mySSLIOHandler;
// mySSLIOHandler is from type TIdServerIOHandlerSSLOpenSSL
如果我尝试这个就有Access violation
:
TIdServerIOHandlerSSLOpenSSL(IMAP4Server.IOHandler).SSLOptions.CertFile := myCertFile; // or any other property of SSLOptions
有人能建议这个问题的答案吗?
答案 0 :(得分:1)
Indy中的每个TCP服务器组件(包括TIdImap4Server
)都使用在之前已分配给服务器TIdServerIOHandler...
属性的IOHandler
个对象。服务器已激活。只有在激活时 时尚未分配TIdServerIOHandlerStack
对象时,才会创建内部TIdServerIOHandler...
对象。
因此,请确保在设置Imap4Server.IOHandler := mySSLIOHandler
之前分配Imap4Server.Active := True
(除非您在设计时分配它们,这样做{{1}是安全的只有在所有DFM属性值都已完成流式处理后才会生效。