دلفي إندي: لا يمكن تحميل مكتبات SSL لأول مرة. أعمال المحاولة

StackOverflow https://stackoverflow.com/questions/2424290

  •  19-09-2019
  •  | 
  •  

سؤال

أنا أستخدم أحدث لقطة إندي (مثبتة بالأمس) وأحدث مكتبات SSL.

عند محاولة إرسال بريد باستخدام IDSP، في المرة الأولى التي يربط فيها المكونات، أحصل على استثناء:

لا يمكن تحميل مكتبات SSL

. وبعد شيء مضحك هو، وأعمال المحاولة دائما. تم تصحيح الأخطاء التي وجدتها أن المشكلة في issslopensslheader، وظيفة Load: Boolean، Line

@OpenSSL_add_all_algorithms := LoadFunctionCLib('OpenSSL_add_all_algorithms');

لماذا يفشل في المرة الأولى ولن الثاني لا يزال غمزا بالنسبة لي، ولكن قبل أن أذهب في التحقيق، أود أن أعرف كما لو أن أي شخص يعرف الحل لهذه المشكلة.

هل كانت مفيدة؟

المحلول

الرمز الذي تستخدمه ليس هو أحدث لقطة. تم إصلاح هذا الخطأ قبل أسبوعين. الخط الذي اقتباسه ليس في أحدث رمز، وقد تم استبداله بما يلي:

fn_OPENSSL_add_all_algorithms_noconf = 'OPENSSL_add_all_algorithms_noconf';
fn_OpenSSL_add_all_algorithms = 'OpenSSL_add_all_algorithms';

@OpenSSL_add_all_algorithms := LoadOldCLib(fn_OpenSSL_add_all_algorithms, fn_OPENSSL_add_all_algorithms_noconf);

نصائح أخرى

أنا أستخدم Delphi XE-1 على Win 7/64، مع SSL و Indy المثبتة بشكل افتراضي. كان على هذا الأسبوع أن أفعل بعض العمل مع SMTP و SSL، واجهت نفس المشكلة التي ذكرتها. تطبيقنا مجمع إلى حد ما ويعيش بالفعل ونشره في عدة مواقع ويستخدم Indy في عدة نقاط في التعليمات البرمجية، لذلك لم يكن تثبيت إصدار أحدث من Indy وإعادة البناء وغيرها،

نظرا لأن المشكلة تنشأ فقط على المرور الأول، فقد تتبعت من خلال بعض الشفرة وتوصلت عن هذا الحل البسيط غير المؤلم:

            smtpClient.connect;
            smtpClient.disconnect;
            smtpClient.connect;
            if not smtpClient.Authenticate then
                raise ... 
            smtpClient.Send(msg);

بمجرد الاتصال connnect وثم disconnect, ، يتم تحميل مكتبات SSL، لذلك في مكالمتك الثانية ل connect أنت جيد للذهاب.

يعمل بشكل جيد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top