Um recurso popular de Delphi é a implantação do projeto de um aplicativo com um arquivo executável (exe). No entanto, se os controles DLL ou ActiveX no seu projeto não estiverem registrados nas máquinas dos usuários, um "EOleSysError" será exibido em resposta à execução do arquivo exe. Para evitar isso, use a ferramenta de linha de comando regsvr32.exe.
Comando RegSvr32.exe
Usando manualmente o regsvr32.exe (Windows. Iniciar - Executar) registrará e cancelará o registro de controles DLL e ActiveX auto-registráveis em um sistema. Regsvr32.exe instrui o sistema a tentar carregar o componente e chamar sua função DLLSelfRegister. Se essa tentativa for bem-sucedida, o Regsvr32.exe exibirá uma caixa de diálogo indicando sucesso.
RegSvr32.exe possui as seguintes opções de linha de comando:
Regsvr32 [/ u] [/ s] [/ n] [/ i [: cmdline]] nome da dll. / s - silencioso; não exibir caixas de mensagem. / u - Cancele o registro do servidor. / i - Chame DllInstall passando um opcional [cmdline]; quando usado com / u chama a desinstalação de DLL. / n - não chame DllRegisterServer; esta opção deve ser usada com / i
Ligar RegSvr32.exe Dentro do código Delphi
Para chamar a ferramenta regsvr32 no código Delphi, use a função “RegisterOCX” para executar um arquivo e aguarde a conclusão da execução.
É assim que o procedimento 'RegisterOCX' pode parecer:
procedimento RegisterOCX; tipo TRegFunc = função: HResult; stdcall; var ARegFunc: TRegFunc; aHandle: THandle; ocxPath: corda; inícioexperimentar ocxPath: = ExtractFilePath (aplicativo. ExeName) + 'Flash.ocx'; aHandle: = LoadLibrary (PChar (ocxPath)); E se aHandle 0 entãoinício ARegFunc: = GetProcAddress (aHandle, 'DllRegisterServer'); E se Atribuído (ARegFunc) entãoinício ExecAndWait ('regsvr32', '/ s' + ocxPath); fim; Biblioteca Livre (aHandle); fim; exceto ShowMessage (Format ('Não foi possível registrar% s', [ocxPath])); fim; fim;
Note o ocxPath A variável aponta para o Macromedia OCX 'Flash.ocx'.
Para poder se registrar, um OCX deve implementar a função DllRegisterServer para criar entradas do Registro para todas as classes dentro do controle. Não se preocupe com a função DllRegisterServer, apenas verifique se ela está lá. Por uma questão de simplicidade, presume-se que o OCX esteja localizado na mesma pasta em que o aplicativo está.
A linha ExecAndWait no código acima chama a ferramenta regsvr32 passando a opção "/ s" junto com o caminho completo para o OCX. A função é ExecAndWait.
usa shellapi;... função ExecAndWait (const ExecuteFile, ParamString: corda): boleano; var SEInfo: TShellExecuteInfo; Código de saída: DWORD; início FillChar (SEInfo, SizeOf (SEInfo), 0); SEInfo.cbSize: = SizeOf (TShellExecuteInfo); com SEInfo comece fMask: = SEE_MASK_NOCLOSEPROCESS; Wnd: = Aplicação. Lidar com; lpFile: = PChar (ExecuteFile); lpParameters: = PChar (ParamString); nShow: = SW_HIDE; end; E se ShellExecuteEx (@SEInfo) entãoiníciorepetir Inscrição. ProcessMessages; GetExitCodeProcess (SEInfo.hProcess, ExitCode); até (ExitCode STILL_ACTIVE) ou Aplicativo. Terminado; Resultado: = Verdadeiro; fimoutro Resultado: = Falso; fim;
A função ExecAndWait usa a chamada da API ShellExecuteEx para executar um arquivo em um sistema. Para mais exemplos de execução de qualquer arquivo do Delphi, veja como executar e executar aplicativos e arquivos a partir do código Delphi.
Flash.ocx dentro de Delphi Exe
Se for necessário registrar um controle ActiveX na máquina do usuário, verifique se o usuário possui o OCX exigido pelo programa, colocando todo o ActiveX (ou DLL) dentro do exe do aplicativo como um recurso. Quando o OCX é armazenado dentro do exe, é fácil extrair, salvar em disco e chamar o procedimento RegisterOCX.