Ένα δημοφιλές χαρακτηριστικό του Δελφοί είναι η ανάπτυξη ενός έργου με μια εφαρμογή εκτελέσιμο αρχείο (exe). Ωστόσο, εάν τα στοιχεία ελέγχου DLL ή ActiveX του έργου σας δεν είναι καταχωρημένα στις μηχανές των χρηστών, θα εμφανιστεί ένα μήνυμα "EOleSysError" ως απάντηση στην εκτέλεση του αρχείου exe. Για να αποφύγετε αυτό, χρησιμοποιήστε το εργαλείο γραμμής εντολών regsvr32.exe.
Command 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 κλήσεις dll απεγκατάσταση. / n - μην καλέσετε το DllRegisterServer. αυτή η επιλογή πρέπει να χρησιμοποιηθεί με το / i
Κλήση RegSvr32.exe Μέσα στον κώδικα των Δελφών
Για να καλέσετε το εργαλείο regsvr32 μέσα στον κώδικα Delphi, χρησιμοποιήστε τη λειτουργία "RegisterOCX" για να εκτελέσετε ένα αρχείο και περιμένετε να ολοκληρωθεί η εκτέλεση.
Έτσι μπορεί να φαίνεται η διαδικασία "RegisterOCX":
διαδικασία 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 μεταβλητών σημείων στο Macromedia OCX του Flash.ocx.
Για να μπορέσει να εγγραφεί, ένα OCX πρέπει να εφαρμόσει τη συνάρτηση DllRegisterServer για να δημιουργήσει καταχωρήσεις μητρώου για όλες τις κλάσεις μέσα στο στοιχείο ελέγχου. Μην ανησυχείτε για τη λειτουργία DllRegisterServer, απλά βεβαιωθείτε ότι υπάρχει. Για λόγους απλότητας, τεκμαίρεται ότι το OCX βρίσκεται στον ίδιο φάκελο με εκείνο όπου βρίσκεται η εφαρμογή.
Η γραμμή ExecAndWait στον παραπάνω κώδικα καλεί το εργαλείο regsvr32 περνώντας τον διακόπτη "/ s" μαζί με την πλήρη διαδρομή προς το OCX. Η λειτουργία είναι ExecAndWait.
χρήσεις shellapi... λειτουργία ExecAndWait (const ExecuteFile, ParamString: σειρά): boolean; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; ξεκινήσει FillChar (SEInfo, μέγεθοςOf (SEInfo), 0); SEInfo.cbSize: = ΜέγεθοςOf (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 για να εκτελέσει ένα αρχείο σε ένα σύστημα. Για περισσότερα παραδείγματα εκτέλεσης οποιουδήποτε αρχείου από τους Δελφούς, ελέγξτε πώς να κάνετε εκτελέστε και εκτελέστε εφαρμογές και αρχεία από τον κώδικα Delphi.
Flash.ocx Μέσα στους Δελφούς Exe
Εάν υπάρχει ανάγκη εγγραφής ενός στοιχείου ελέγχου ActiveX στο μηχάνημα του χρήστη, βεβαιωθείτε ότι ο χρήστης έχει το OCX το πρόγραμμα απαιτεί τοποθετώντας ολόκληρο το ActiveX (ή DLL) μέσα στο exe της εφαρμογής ως a πόρος. Όταν το OCX αποθηκεύεται στο εσωτερικό του exe, είναι εύκολο να εξαχθεί, να αποθηκευτεί στο δίσκο και να καλέσετε τη διαδικασία RegisterOCX.