פקדי DLL ו- ActiveX מיישום דלפי

click fraud protection

תכונה פופולרית של דלפי הוא פריסת הפרויקט של יישום עם קובץ הפעלה (exe). עם זאת, אם פקדי ה- DLL או ActiveX בפרויקט שלך אינם רשומים במחשבי המשתמשים, "EOleSysError" יוצג בתגובה להפעלת קובץ ה- exe. כדי להימנע מכך, השתמש בכלי שורת הפקודה regsvr32.exe.

פיקוד RegSvr32.exe

באופן ידני באמצעות regsvr32.exe (Windows. התחל - הפעלה) ירשום וביטול רישום של פקדי DLL ו- ActiveX ברישום עצמי במערכת. Regsvr32.exe מורה למערכת לנסות לטעון את הרכיב ולקרוא לפונקציית ה- DLLSelfRegister שלה. אם ניסיון זה מצליח, Regsvr32.exe מציג דו-שיח המעיד על הצלחה.

RegSvr32.exe כולל את אפשרויות שורת הפקודה הבאות:

Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] dllname. / s - שקט; להציג תיבות הודעה. / u - ביטול רישום השרת. / i - התקשר ל- DllInstall שמעביר לו אופציונלי [cmdline]; כאשר משתמשים בשיחות U / הסרת ההתקנה. / n - אל תתקשר ל- DllRegisterServer; יש להשתמש באפשרות זו עם / i 

התקשרו RegSvr32.exe במסגרת קוד דלפי

כדי להתקשר לכלי regsvr32 בתוך קוד דלפי, השתמש בפונקציה "RegisterOCX" כדי להפעיל קובץ ולחכות לביצוע הסיום.

כך יכול להיראות נוהל 'RegisterOCX':

instagram viewer
תהליך RegisterOCX; סוג
TRegFunc = פונקציה: HResult; stdcall; var
ARegFunc: TRegFunc; aHandle: THandle; ocxPath: מחרוזת; התחלנסה
ocxPath: = ExtractFilePath (יישום. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); אם aHandle 0 לאחר מכןהתחל
ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); אם הוקצה (ARegFunc) לאחר מכןהתחל
ExecAndWait ('regsvr32', '/ s' + ocxPath); סוף; FreeLibrary (aHandle); סוף; מלבד
ShowMessage (פורמט ('לא ניתן לרשום% s', [ocxPath])); סוף; סוף;

הערה: ה ocxPath משתנה מצביע ל- OCX 'Flash.ocx' של Macromedia.

כדי להיות מסוגל לרשום את עצמו, OCX חייב ליישם את הפונקציה DllRegisterServer כדי ליצור ערכי רישום עבור כל המחלקות שנמצאות בבקרה. אל תדאגו לגבי הפונקציה DllRegisterServer, רק וודאו שהיא שם. לשם הפשטות, יש להניח כי ה- OCX ממוקם באותה תיקיה שבה נמצא היישום.

קו ExecAndWait בקוד שלמעלה מכנה את הכלי regsvr32 על ידי העברת מתג "/ s" יחד עם הנתיב המלא ל- OCX. הפונקציה היא ExecAndWait.

שימושים שלפי;... פונקציה ExecAndWait (const ExecuteFile, ParamString: מחרוזת): בוליאני; var
SEInfo: TShellExecuteInfo; ExitCode: DWORD; התחל
FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); עם SEInfo אכן מתחילים
fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = יישום. ידית; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; הnd; אם ShellExecuteEx (@SEInfo) לאחר מכןהתחלחזור
יישום. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); עד (ExitCode STILL_ACTIVE) או יישום. הסתיים; תוצאה: = נכון; סוףאחר תוצאה: = שווא; סוף;

הפונקציה ExecAndWait משתמשת בשיחת ה- API של ShellExecuteEx כדי לבצע קובץ במערכת. לקבלת דוגמאות נוספות להפעלת קובץ כלשהו מדלפי, בדוק כיצד לעשות זאת להפעיל ולהפעיל יישומים וקבצים מקוד דלפי.

Flash.ocx בתוך דלפי אקס

אם יש צורך לרשום פקד ActiveX במחשב המשתמש, וודא כי למשתמש יש את ה- OCX התוכנית דורשת על ידי הצבת כל ה- ActiveX (או ה- DLL) בתוך exe של היישום כ- משאב. כאשר ה- OCX מאוחסן בתוך ה- exe, קל לחלץ אותו, לשמור אותו לדיסק ולהתקשר לפרוצדורת RegisterOCX.

instagram story viewer