TN057: localização de componentes MFC
Dica
A nota técnica a seguir não foi atualizada desde que ela foi incluída pela primeira vez na documentação online.Como resultado, alguns procedimentos e tópicos podem estar incorretos ou expirados.Para obter as informações mais recentes, é recomendável que você procure o tópico de interesse no índice de documentação online.
Essa observação descreve alguns dos designs e procedimentos que você pode usar para localizar o seu componente, ele se um aplicativo ou um controlador OLE ou uma DLL que usa o MFC.
Visão Geral
Há realmente dois a resolver problemas ao localizar um componente que usa o MFC. Primeiro, você deve localizar seus próprios recursos — cadeias de caracteres, caixas de diálogo, e outros recursos específicos de seu componente. A maioria dos componentes criados usando o MFC também incluem e usam um número de recursos que são definidos por MFC. Você deve fornecer recursos encontrados MFC também. Felizmente, vários idiomas já são fornecidos por MFC próprio.
Além disso, o componente deverá ser preparado para ser executado em seu ambiente de destino (europeu ambiente ou DBCS- habilitado). Em geral, isso depende do aplicativo que trata de caracteres com o bit alto definido corretamente e que trata as cadeias de caracteres com caracteres de byte duplo. O MFC estiver habilitado, por padrão, para ambos os ambientes, de modo que é possível ter um único binário mundial que é usada em todas as plataformas com apenas os recursos diferentes obstruídos em no momento de configuração.
Localizando os recursos do seu componente
Localize seu aplicativo ou DLL deve envolver simplesmente substituir os recursos com os recursos que correspondem ao idioma de destino. Para seus próprios recursos, isso é relativamente simples: editar os recursos no publicador de recursos e criar seu aplicativo. Se seu código é gravado corretamente não haverá nenhum cadeia de caracteres ou texto que você deseja localizar embutido em código no seu código-fonte C++ – qualquer local pode ser feita simplesmente alterando recursos. De fato, você pode implementar seu componente de modo que todas fornecer uma versão localizada do envolve nem mesmo uma compilação de código original. Isso é mais complexo, mas é valor bom ele e é o mecanismo escolhido para MFC próprio. Também é possível localizar um aplicativo carregando o arquivo EXE de ou da DLL no publicador de recursos e editando os recursos direto. Quando possível, requer o reapplication dessas alterações cada vez que você cria uma nova versão do aplicativo.
Um modo para evitar que é localizar todos os recursos em uma DLL separada, às vezes chamado de uma DLL satélite. Este DLL é carregado em dinamicamente em tempo de execução e recursos são carregados do DLL em vez do módulo principal com todo o código. MFC O oferece suporte diretamente essa abordagem. Considere um aplicativo chamado MYAPP.EXE; pode ter todos os seus recursos localizados em uma DLL chamado MYRES.DLL. Em InitInstance de aplicativo deve executar o seguinte para carregar que o DLL e para fazer com que o MFC nos recursos de carga de aquele local:
CMyApp::InitInstance()
{
// one of the first things in the init code
HINSTANCE hInst = LoadLibrary("myres.dll");
if (hInst != NULL)
AfxSetResourceHandle(hInst);
// other initialization code would follow
.
.
.
}
Desde então, o MFC carregará recursos do que a DLL em vez de myapp.exe. Todos os recursos, porém, deve estar presentes em que o DLL; O MFC não pesquisará a instância do aplicativo à procura de um determinado recurso. Essa técnica se aplica igualmente bem a DLL normais bem como aos controladores OLE. O programa de instalação copiaria a versão apropriada de MYRES.DLL dependendo da localidade de recursos que o usuário deseja.
É relativamente fácil criar uma DLL de recurso só. Você cria um projeto de DLL, adicionar seu arquivo de .RC, e o adiciona os recursos necessários. Se você tiver um projeto existente que não usa essa técnica, você pode copiar os recursos do projeto. Depois de adicionar o arquivo de recurso ao projeto, você está quase pronto para compilar o projeto. A única coisa que você deve fazer é definida as opções do vinculador incluir /NOENTRY. Isso diz ao vinculador que o DLL não tem nenhum ponto de entrada – desde que não tem nenhum código, não tem nenhum ponto de entrada.
Dica
O editor de recurso no Visual C++ 4.0 e linguagens de um posteriores oferecem suporte a vários por .RC arquivo.Isso pode tornar muito fácil de gerenciar sua localização em um único projeto.Os recursos para cada idioma são controlados pela políticas de pré-processador geradas pelo editor de recursos.
Usando os recursos encontrados fornecidos MFC
Qualquer aplicativo MFC que você criar reutilização duas coisas MFC: código e recursos. Isto é, o MFC tem mais mensagens de erro, caixas de diálogo internas, e outros recursos usados por classes de MFC. Para localizar completamente seu aplicativo, você precisa localizar não apenas os recursos do seu aplicativo, mas também os recursos oriundos diretamente de MFC. MFC O fornece um número de arquivos de recursos de linguagem diferentes automaticamente, de forma que se o idioma de destino seja um da suporte MFC dos idiomas já, você precisa apenas de garantir que você usa esses recursos encontrados.
A partir dessa gravação, MFC o oferece suporte a idioma alemão, espanhol, chinês, francês, italiano, japonês, coreano e o. Os arquivos que contêm essas versões localizadas nos diretórios MFC\INCLUDE\L.* ('L' representa localizado). Os arquivos de alemão estão em MFC \ INCLUDE em \ L.DEU, por exemplo. Para fazer seu aplicativo usar esses arquivos de RC em vez de arquivos encontrados em MFC \ INCLUDE, adicione /IC:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\MFC\INCLUDE\L.DEU à linha de comando de RC (isso é apenas um exemplo; você precisará substituir sua localidade da opção assim como o diretório em que você instalou Visual C++).
As instruções acima funcionarão se os links de aplicativo estatisticamente com o MFC. A maioria de link de aplicativos dinamicamente (porque esta é a opção de AppWizard). Neste cenário, não apenas o código é vinculado dinamicamente – assim que são recursos. No, você pode localizar os recursos em seu aplicativo, mas os recursos de implementação de MFC serão carregados ainda de MFC7x.DLL (ou uma versão posterior) ou de MFC7xLOC.DLL se existir. Você pode ver esse de dois ângulos diferentes.
A abordagem mais complexa é enviar um de MFC7xLOC.DLLs encontrado (como MFC7xDEU, para o alemão, o MFC7xESP.DLL para espanhol, etc.), ou uma versão posterior, e instalar o MFC7xLOC.DLL apropriado no diretório do sistema quando o usuário instala o seu aplicativo. Isso pode ser muito complexo para o desenvolvedor e o usuário final e assim não é recomendado. Consulte Observação 56 técnica para obter mais informações sobre essa técnica e as advertências.
A abordagem mais simples e a mais segura é incluir os recursos encontrados MFC no aplicativo ou DLL (ou seu próprio DLL satélite se você estiver usando um). Isso evita problemas de instalar MFC7xLOC.DLL corretamente. Para fazer isso, siga as mesmas instruções para os casos estáticos dados acima (definindo a linha de comando de RC corretamente ao ponto para recursos encontrados), exceto que você também deve remover /D_AFXDLL define o que foi adicionado por AppWizard. Quando /D_AFXDLL é definido, AFXRES.H (e outros arquivos MFC RC) não definem de fato nenhum recursos (como serão recebidos de DLL MFC no lugar).