Ein beliebtes Feature von Delphi ist die Projektbereitstellung einer Anwendung mit einem ausführbare Datei (exe). Wenn die DLL- oder ActiveX-Steuerelemente in Ihrem Projekt jedoch nicht auf den Computern der Benutzer registriert sind, wird als Reaktion auf das Ausführen der exe-Datei ein "EOleSysError" angezeigt. Um dies zu vermeiden, verwenden Sie das Befehlszeilentool regsvr32.exe.
RegSvr32.exe Befehl
Manuelles Verwenden von regsvr32.exe (Windows. Start - Ausführen) registriert und hebt die Registrierung selbstregistrierbarer DLL- und ActiveX-Steuerelemente auf einem System auf. Regsvr32.exe weist das System an, zu versuchen, die Komponente zu laden und ihre DLLSelfRegister-Funktion aufzurufen. Wenn dieser Versuch erfolgreich ist, zeigt Regsvr32.exe ein Dialogfeld an, das den Erfolg anzeigt.
RegSvr32.exe verfügt über die folgenden Befehlszeilenoptionen:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] DLL-Name. / s - Lautlos; Keine Meldungsfelder anzeigen. / u - Server abmelden. / i - Rufe DllInstall auf und übergebe ihm eine optionale [cmdline]. Bei Verwendung mit / u wird die DLL deinstalliert. / n - DllRegisterServer nicht aufrufen; Diese Option muss mit / i verwendet werden
Anruf RegSvr32.exe Innerhalb des Delphi-Codes
Verwenden Sie zum Aufrufen des Regsvr32-Tools im Delphi-Code die Funktion „RegisterOCX“, um eine Datei auszuführen, und warten Sie, bis die Ausführung abgeschlossen ist.
So könnte die 'RegisterOCX'-Prozedur aussehen:
Verfahren RegisterOCX; Art TRegFunc = Funktion: HResult; stdcall; var ARegFunc: TRegFunc; aHandle: THandle; ocxPath: Zeichenfolge; StartVersuchen ocxPath: = ExtractFilePath (Anwendung. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); wenn aHandle 0 dannStart ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); wenn Zugewiesen (ARegFunc) dannStart ExecAndWait ('regsvr32', '/ s' + ocxPath); Ende; FreeLibrary (aHandle); Ende; außer ShowMessage (Format ('% s kann nicht registriert werden', [ocxPath])); Ende; Ende;
Beachten Sie das ocxPath Variable zeigt auf die Macromedia OCX 'Flash.ocx'.
Um sich selbst registrieren zu können, muss eine OCX die Funktion DllRegisterServer implementieren, um Registrierungseinträge für alle Klassen im Steuerelement zu erstellen. Machen Sie sich keine Sorgen um die DllRegisterServer-Funktion, stellen Sie einfach sicher, dass sie vorhanden ist. Der Einfachheit halber wird davon ausgegangen, dass sich die OCX im selben Ordner befindet, in dem sich die Anwendung befindet.
Die ExecAndWait-Zeile im obigen Code ruft das regsvr32-Tool auf, indem der Schalter "/ s" zusammen mit dem vollständigen Pfad zur OCX übergeben wird. Die Funktion ist ExecAndWait.
Verwendet Shellapi;... Funktion ExecAndWait (const ExecuteFile, ParamString: Zeichenfolge): Boolescher Wert; var SEInfo: TShellExecuteInfo; ExitCode: DWORD; Start FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); mit SEInfo fange an fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Anwendung. Griff; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; end; wenn ShellExecuteEx (@SEInfo) dannStartwiederholen Anwendung. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); bis um (ExitCode STILL_ACTIVE) oder Anwendung. Beendet; Ergebnis: = True; Endesonst Ergebnis: = Falsch; Ende;
Die ExecAndWait-Funktion verwendet den ShellExecuteEx-API-Aufruf, um eine Datei auf einem System auszuführen. Weitere Beispiele zum Ausführen von Dateien aus Delphi finden Sie unter Gewusst wie Ausführen und Ausführen von Anwendungen und Dateien aus Delphi-Code.
Flash.ocx In Delphi Exe
Wenn ein ActiveX-Steuerelement auf dem Computer des Benutzers registriert werden muss, stellen Sie sicher, dass der Benutzer über das verfügt OCX, das das Programm benötigt, indem das gesamte ActiveX (oder die DLL) als Exe in die Exe der Anwendung eingefügt wird Ressource. Wenn die OCX in der exe gespeichert ist, können Sie sie einfach extrahieren, auf der Festplatte speichern und die RegisterOCX-Prozedur aufrufen.