چگونه کنترلهای OLE مثل (dynamic-link library (DLL یا کنترلهای (ActiveX (OCX را از درون دلفی Register یا UnRegister بکنیم؟
کی از چیزهایی که دلفی را این قدر برای من در زمان Deploy کردن یک پروژه محبوب کرده این است که شما به عنوان یک برنامه نویس (در اکثر موارد) می توانید فقط فایل exe رو برای کاربر بفرستید و کاربر با خیال راحت می تواند از همان فایل exe به تنهایی استفاده کنید.
جهت اطلاع کسانی که نمی دانند مفهوم Deploy کردن چیست باید توضیح بسیار مختصری بدهیم. شما ممکن است در پروژه خود از ActiveXها، DLLها و یا سایر فایلهای دیگر استفاده کنید. اما کاربر این فایلهای اضافه را بر روی کامپیوتر ندارد بنابراین نمی تواند پروژه شما را به تنهایی اجرای کند و باید دوجین فایل اضافه را نیز همراه داشته باشد. Deploy کردن فرآیندی است که شما در آن پروژه خود را برای اجرای روی کامپیوتر کاربر بدون نیاز به فایلهای اضافی آماده می کنید.
البته من مقاله ای دیگری نیز راجع به استفاده از Flash در دلفی نوشته ام که در آن به خوبی نصب ActiveX فلش بر روی کامپیوتر کاربر توضیح داده شده است. ولی از آن جا که کد آن پروژه کمی پیچیده و بزرگ است و از آن جا که آن مقاله با وسواس تمام نوشته شده و بسیار مفصل است، تصمیم گرفتم که مقاله دیگری راجع به این مساله بنویسم که به طور مختصرتر به این مقوله بپردازد و کدهای ساده تر و قابل فهم تری نیز ارائه کنید.
آدرس مقاله “استفاده از Flash در دلفی”:
و اما اصل مطلب. بعضی مواقع شما در پروژه ها خود یک ActiveX را با استفاده از دستور “import an ActiveX control” وارد می کنید ولی اگر کاربر این ActiveX را نداشته باشد با exception یا خطایی به نام EOleSysError مواجه خواهد شد و نخواهد توانست که از برنامه شما استفاده کند.
RegSvr32.exe
دستور command-lineی یا خط فرمانی RegSvr32.exe کار نصب کنترلهای dl یا ActiveX را دارد. شما می توانید به طور دستی از این ابزار استفاده کنید. کافی است در ویندوز گزینه Run منوی Start را اجرا کرده و به راحتی این دستور را اجرا کنید. وقتی شما از RegSvr32.exe استفاده می کنید، سعی خواهد کرد که کمپوننت را load کرده و تابع DLLSelfRegister آنرا فرا بخواند. اگر این تلاش موفق باشد RegSvr32.exe یک پنجره با پیغام موفقیت نشان می دهد.
RegSvr32.exe پارامترهای زیر را دارد:
|
Regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname
/s – Silent; display no message boxes /u – Unregister server /i – Call DllInstall passing it an optional [cmdline]; when used with /u calls dll uninstall /n – do not call DllRegisterServer; this option must be used with /i |
توجه: با استفاده از سوییچ ؟/ می توانید لیست تمامی پارامترهای را ببینید.
از درون دلفی.
برای این که شما این کد را از درون دلفی اجرا کنید به تابعی احتیاج دارید که یک فایل exe را اجرا کرده و تا اتمام اجرای آن صبر کند.
تابع RegisterOCX باید چیزی شبیه به این باشد:
procedure RegisterOCX(ocxPath: string); |
توجه: متغییر ocxPath به نام ocx اشاره دارد. به عنوان مثال شما می توانید این تابع را به این شکل فرا بخوانید:
که سبب نصب ActiveX مربوط به فلش می شود.
برای این که یک ActiveX بتواند نصب شود کنترل ActiveX باید تابع DllRegisterServer را اجرا کند. به زبان ساده، این تابع مداخل registry را برای تمامی کلاسهای داخل کنترل ایجاد می کند. احتیاج نیست ما نگران تابع DllRegisterServer باشیم. ما فقط باید اطمینان پیدا کنیم که این تابع در ActiveX مربوطه وجود دارد.
در تابع بالا از تابع دیگری استفاده شده به نام ExecAndWait. این تابع کار صدا کردن regsvr32 را با پارامتر s/ و نام فایل ocx انجام می دهد. (پارامتر s به معنای silent سبب اجرای regsvr32 در مد خاموش می شود. در این مد پیغام های خطا و موفقیت نمایش داده نمی شود و کاربر از نصب ActiveX مطلع نخواهد شد.
و این هم تابع ExecAndWait:
uses ShellAPI; |
البته توجه داشته باشید که ShellAPI باید در لیست uses یونیت شما وجود داشته باشد.
تابع فوق از تابع APIی به نام ShellExecuteEx استفاده می کند تا یک فایل exe را در سیستم اجرا کند. اگر شما به اطلاعات بیشتری راجع به این تابع و توابعی مثل این نیاز دارید به مقاله “اجرای فایل exe از درون دلفی” توجه کنید.
Flash.ocx داخل فایل exe دلفی
همه چیز به خوبی پیش رفت. تنها مسئله ای که باقیست پنهان کردن Flash.ocx یا هر ocx دیگری از دید کاربر است. انجام این کار به سادگی امکان پذیر است. فقط کافی است شما فایل ocx را در Resourceها اضافه کنید. Resource مربوطه با Exe شما Compile خواهد شد و در هنگام اجرای برنامه شما به سادگی آن ocx را روی هارد ذخیره کرده و آن را نصب می کنید. برای اطلاعات بیشتر راجع به این تکنیک به مقالهی زیر که در ابتدای این نوشتار هم آنرا معرفی کردم مراجعه کنید.
خلاصه
فهمیدیم با استفاده از دستور خط فرمانی regsvr32.exe می توانیم یک کنترل OLE را Register یا UnRegister بکنیم.
همچنین لیست پارامتهای این تابع را دیدیم. به علاوه تابعی به نام RegisterOCX ارائه کردیم که کار نصب OCX را بر عهده دارد. این تابع از تابع دیگری به نام ExecAndWait برای اجرای regsvr32.exe استفاده می کند و تا اتمام اجرای آن صبر می کند. به علاوه فهمیدیم که این تابع برای اجرای درست به یونیت ShellAPI احتیاج داشته و از تابع ShellExecuteEx جهت اجرای فایل سود می جوید.
به علاوه دانستیم که به سادگی با استفاده از Resourceهای می توانیم فایل OCX خود را در داخل exe از دید کاربر نهایی پنهان کنیم.
موفق و موید و منصور باشید
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن