DLL- und ActiveX-Steuerelemente aus einer Delphi-Anwendung

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 
instagram viewer

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.