Controles ActiveX MFC: distribuindo controles ActiveX
Este artigo descreve vários problemas relacionados ao reencaminhamento controles ActiveX:
ANSI ou Unicode versões de controle
Instalando controles ActiveX e DLL redistribuíveis
Registrando controles
Dica
Para obter informações adicionais sobre como redistribuir controles ActiveX, consulte Redistribuindo controles.
ANSI ou Unicode versões de controle
Você deve decidir se deseja enviar uma versão ANSI ou Unicode de controle, ou ambos. Esta decisão se baseia nos fatores a portabilidade inerentes em ANSI e em conjuntos de caracteres Unicode.
Os controles ANSI, que funcionam em todos os sistemas operacionais do Win32, permitem a portabilidade máximo entre vários sistemas operacionais do Win32. Os controles Unicode só funcionam no Windows NT (versão 3,51 ou posterior), mas não no Windows 95 ou Windows 98. Se a portabilidade é sua preocupação principal, enviar controles ANSI. Se os controles só serão executadas no Windows NT, você pode enviar controles de Unicode. Você também pode optar por enviar e ter sua instalação do aplicativo a versão mais apropriado para o sistema operacional do usuário.
Instalando controles ActiveX e DLL redistribuíveis
O programa de instalação que você fornece com os controles ActiveX deve criar um subdiretório especial de diretório do Windows e instalar os arquivos de .OCX dos controles nele.
Dica
Use o do windows GetWindowsDirectory API em seu programa de instalação do para obter o nome do diretório do Windows.Talvez você queira derivar o nome do subdiretório do nome da sua empresa ou produto.
O programa de instalação deve instalar os arquivos necessários redistribuíveis dll no diretório do sistema do windows. Se algum dos DLL estiverem presentes no computador do usuário, o programa de instalação deverá comparar as versões com as versões que você está instalando. Reinstale um arquivo apenas se o número de versão é mais alto que o arquivo já instalado.
Como os controles ActiveX podem ser usados somente em aplicativos de contêiner OLE, não há necessidade de distribuir o conjunto completo de DLL do com os controles. Você pode assumir que o aplicativo contentor (ou o sistema operacional próprio) têm as dlls OLE DB do padrão instalados.
Registrando controles
Antes que um controle pode ser usado, as entradas adequadas devem ser criadas para ele na base de dados do registro do windows. Qualquer contêiner do controle ActiveX fornecem um item de menu para novos usuários aos controles do registro, mas esse recurso pode não estar disponível em todos os contêineres. Consequentemente, talvez o programa de instalação para registrar os controles quando são instalados.
Se preferir, você pode gravar seu programa de instalação para registrar diretamente o controle em vez disso.
Use a API de LoadLibrary para carregar a DLL do controle. Em seguida, use GetProcAddress obter o endereço da função de DllRegisterServer “”. Finalmente, chame a função de DllRegisterServer . O exemplo de código a seguir demonstra um método possível, onde hLib armazena o identificador da biblioteca de controle, e repositórios de lpDllEntryPoint o endereço da função de DllRegisterServer “”.
HINSTANCE hLib = LoadLibrary(pszDllName);
if (hLib < (HINSTANCE)HINSTANCE_ERROR)
{
AfxMessageBox(IDS_LOADLIBFAILED); //unable to load DLL
iReturn = FAIL_LOAD; //unable to load DLL
}
// Find the entry point.
lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer");
if (lpDllEntryPoint != NULL)
(*lpDllEntryPoint)();
else
;// Unable to locate entry point
A vantagem de registrar o controle é diretamente que você não precisa chamar e carregar um processo separado (ou seja, REGSVR32), reduzindo o tempo de instalação. Além disso, porque o registro é um processo interno, o programa de instalação pode manipular erros e situações imprevisíveis melhor do que um processo externo pode.
Dica
Antes do programa de instalação instala um controle ActiveX, deve chamar OleInitialize.Quando o programa de instalação for concluído, chame OleUnitialize.Isso garante que as dlls do sistema OLE estão no estado apropriado para registrar um controle ActiveX.
Você deve registrar MFCx0.DLL.