Популярна функция на Delphi е проектното внедряване на приложение с изпълним файл (exe). Ако обаче DLL или ActiveX контролите във вашия проект не са регистрирани на машините на потребителите, ще се покаже „EOleSysError“ в отговор на стартирането на exe файла. За да избегнете това, използвайте командния ред regsvr32.exe.
RegSvr32.exe команда
Ръчно използване на regsvr32.exe (Windows. Start - Run) ще регистрира и отрегистрира саморегистриращи се 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 В рамките на кода на Delphi
За да извикате инструмента 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 променливи точки към "Flash.ocx" Macromedia OCX.
За да може да се регистрира, OCX трябва да реализира функцията DllRegisterServer, за да създаде записи в регистъра за всички класове вътре в контрола. Не се притеснявайте за функцията DllRegisterServer, просто се уверете, че е там. За простота се предполага, че OCX се намира в същата папка, в която е и приложението.
Редът ExecAndWait в горния код извиква инструмента regsvr32 чрез преминаване на превключвателя "/ s" заедно с пълния път към OCX. Функцията е ExecAndWait.
употреби shellapi;... функция ExecAndWait (конст 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); nПоказване: = SW_HIDE; дри; ако ShellExecuteEx (@SEInfo) тогавазапочвамповторение Приложение. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); до (ExitCode STILL_ACTIVE) или приложение. Прекратен; Резултат: = True; крайоще Резултат: = False; край;
Функцията ExecAndWait използва призива API на ShellExecuteEx за изпълнение на файл в система. За повече примери за изпълнение на който и да е файл от Delphi, вижте как да изпълнява и стартира приложения и файлове от кода на Delphi.
Flash.ocx вътре в Delphi Exe
Ако има нужда от регистрация на ActiveX контрола на машината на потребителя, след това се уверете, че потребителят има OCX, която програмата изисква, като постави целия ActiveX (или DLL) вътре в exe на приложението като a ресурс. Когато OCX се съхранява в exe, е лесно да извлечете, запишете на диск и да извикате процедурата RegisterOCX.