की एक लोकप्रिय विशेषता डेल्फी एक के साथ एक आवेदन की परियोजना तैनाती है निष्पादन योग्य फ़ाइल (exe). हालाँकि, यदि आपकी परियोजना में DLL या ActiveX नियंत्रण उपयोगकर्ताओं की मशीनों पर पंजीकृत नहीं हैं, तो “EOleSysError” को exe फ़ाइल चलाने के जवाब में प्रदर्शित किया जाएगा। इससे बचने के लिए, regsvr32.exe कमांड-लाइन टूल का उपयोग करें।
RegSvr32.exe कमांड
मैन्युअल रूप से regsvr32.exe (विंडोज़) का उपयोग कर रहा है। स्टार्ट - रन) एक सिस्टम पर स्व-रजिस्टर करने योग्य DLL और ActiveX नियंत्रणों को पंजीकृत और अपंजीकृत करेगा। Regsvr32.exe घटक को लोड करने और उसके DLLSelfRegister फ़ंक्शन को कॉल करने का प्रयास करने के लिए सिस्टम को निर्देश देता है। यदि यह प्रयास सफल है, तो Regsvr32.exe सफलता का संकेत देने वाला एक संवाद प्रदर्शित करता है।
RegSvr32.exe में निम्न कमांड-लाइन विकल्प हैं:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname। / एस - साइलेंट; कोई संदेश बॉक्स प्रदर्शित न करें। / यू - अपंजीकृत सर्वर। / i - कॉल DllInstall इसे एक वैकल्पिक [cmdline] पास करता है; जब / यू कॉल के साथ उपयोग किया जाएगा dll अनइंस्टॉल। / n - DllRegisterServer को कॉल न करें; इस विकल्प का उपयोग i / i के साथ किया जाना चाहिए
कॉल Regsvr32.exe डेल्फी कोड के भीतर
डेल्फी कोड के भीतर regsvr32 टूल को कॉल करने के लिए, एक फ़ाइल निष्पादित करने के लिए "रजिस्टरऑक्सएक्स" फ़ंक्शन का उपयोग करें और निष्पादन समाप्त होने की प्रतीक्षा करें।
यह है कि 'RegisterOCX' प्रक्रिया कैसे दिख सकती है:
प्रक्रिया RegisterOCX; प्रकार TRegFunc = समारोह: मानव संसाधन; stdcall; वर ARegFunc: TRegFunc; एंथेल: थैंडल; ocxPath: तार; शुरूप्रयत्न ocxPath: = ExtractFilePath (अनुप्रयोग) ExeName) + 'Flash.ocx'; अनहैंडल: = लोडलॉर्डर (पीशर (ओएक्सएक्सपैथ)); अगर अनहद ० फिरशुरू ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); अगर असाइन किया गया (ARegFunc) फिरशुरू ExecAndWait ('regsvr32', '/ s' + ocxPath); समाप्त; फ्रीलाउड्स (एंडल); समाप्त; के सिवाय ShowMessage (प्रारूप ('% s रजिस्टर करने में असमर्थ', [ocxPath])); समाप्त; समाप्त;
ध्यान दें ocxPath चर 'Flash.ocx' Macromedia OCX को इंगित करता है।
खुद को पंजीकृत करने में सक्षम होने के लिए, एक OCX को नियंत्रण के अंदर सभी वर्गों के लिए रजिस्ट्री प्रविष्टियों को बनाने के लिए DllRegisterServer फ़ंक्शन को लागू करना होगा। DllRegisterServer फ़ंक्शन के बारे में चिंता न करें, बस सुनिश्चित करें कि यह वहां है। सरलता के लिए, यह माना जाता है कि OCX उसी फ़ोल्डर में स्थित है जहां एप्लिकेशन है।
उपरोक्त कोड में ExecAndWait लाइन OCX के लिए पूर्ण पथ के साथ "/ s" स्विच पास करके regsvr32 टूल को कॉल करती है। समारोह ExecAndWait है।
का उपयोग करता है shellapi... समारोह ExecAndWait (स्थिरांक ExecuteFile, ParamString: तार): बूलियन; वर SEInfo: TShellExecuteInfo; एक्सिटकोड: DWORD; शुरू फिल्चर (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); साथ में SEInfo शुरू करो fMask: = SEE_MASK_NOCLOSEPROCESS; वंद: = आवेदन। संभाल; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; इnd; अगर ShellExecuteEx (@SEInfo) फिरशुरूदोहराना आवेदन। ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); जब तक (एक्ज़िटकोड STILL_ACTIVE) या एप्लिकेशन। समाप्त; परिणाम: यह सच है =; समाप्तअन्य परिणाम: झूठी =; समाप्त;
ExecAndWait फ़ंक्शन किसी सिस्टम पर फ़ाइल निष्पादित करने के लिए ShellExecuteEx API कॉल का उपयोग करता है। डेल्फी से किसी भी फ़ाइल को निष्पादित करने के अधिक उदाहरणों के लिए, देखें कि कैसे निष्पादित और डेल्फी कोड से अनुप्रयोगों और फ़ाइलों को चलाने.
Flash.ocx अंदर डेल्फी Exe
यदि उपयोगकर्ता की मशीन पर ActiveX नियंत्रण दर्ज करने की आवश्यकता है, तो सुनिश्चित करें कि उपयोगकर्ता के पास है OCX प्रोग्राम को एप्लिकेशन के exe के अंदर पूरे ActiveX (या DLL) को रखकर आवश्यक है संसाधन। जब OCX को exe के अंदर संग्रहीत किया जाता है, तो इसे निकालना, डिस्क को सहेजना और RegisterOCX प्रक्रिया को कॉल करना आसान होता है।