delphi सिस्टम पथ के बाहर एक dll का उपयोग कैसे करें




openssl indy (3)

मैंने एक आवेदन किया जो openssl dlls ( libeay32.dll और ssleay32.dll ) का उपयोग करता है। यह उन का उपयोग करने के लिए इंडी है, मैं सीधे डीएलएल को कॉल नहीं करता

सबसे आसान समाधान मैं एक इंस्टॉलर से बचने पाया (मैं सिर्फ एक exe delpoy और मैं इस दृष्टिकोण के साथ ठीक हूँ) है:

  1. डीएलएस को एक्सई के संसाधन के रूप में डाल दिया
  2. प्रोग्राम शुरू करने पर मैं उन्हें exe फ़ोल्डर में निकालने के लिए
  3. exe उन का उपयोग करता है

यह एकदम सही है, लेकिन मैं एक अस्थायी फ़ोल्डर में डीएलएस को निकालने के दृष्टिकोण को बेहतर करना चाहूंगा, न कि exe फ़ोल्डर पर (जो कई मामलों में डेस्कटॉप है)।

समस्या यह है कि मुझे पता नहीं है कि अनुप्रयोग को डीएमएल का इस्तेमाल करने के लिए अस्थायी फ़ोल्डर में कैसे बल देना है, क्योंकि अब यह व्यवहार है: अगर डीएलएस मौजूदा निर्देशिका में नहीं हैं तो सिस्टम पथ में परिभाषित निर्देशिकाओं में खोज करने का प्रयास करें।

कौन मेरे समाधान दर में डीएलएस का उपयोग करने के लिए मजबूर करने के लिए एक समाधान को जानता है? (जैसे "अस्थायी तौर पर डीएलएस दर्ज करना")


जैसे ही आप उन्हें अस्थायी फ़ोल्डर में लिखा है, जैसे ही LoadLibrary साथ DLL को लोड करें
इससे इंडी के LoadLibrary आपकी डीएलएल का उपयोग कर लेगा, जब उन्हें आवश्यकता होगी:

यदि lpFileName में कोई पथ शामिल नहीं है और एक ही आधार नाम और एक्सटेंशन के साथ एक से अधिक भारित मॉड्यूल है, तो फ़ंक्शन एक मॉड्यूल को लोड करता है जो पहले लोड किया गया था।


अगर आप इंडी 10 के अप-टू-डेट संस्करण का उपयोग कर रहे हैं, तो IdSSLOpenSSLHeaders यूनिट के पास एक सार्वजनिक IdOpenSSLSetLibPath() फ़ंक्शन है जो कि IdOpenSSLSetLibPath() लिए कस्टम फ़ोल्डर को देखने के लिए इंडी को बताता है:

procedure IdOpenSSLSetLibPath(const APath: String);

आप DLL खोज क्रम में हेरफेर करने के लिए SetDllDirectory का उपयोग कर सकते हैं।





indy10