Controles DLL e ActiveX de um aplicativo Delphi

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

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.

instagram story viewer