Pergunta

Eu tenho um produto comercial que é um DLL (código nativo de 32 bits) e agora é hora de criar uma versão de 64 bits. Então, ao instalar no Windows de 64 bits, a versão de 32 bits entra no Windows syswow64 e a versão de 64 bits entra em ... Windows System32! (Estou mordendo minha língua aqui ...) ou as DLL (s) podem ser instaladas ao lado do aplicativo cliente.

O que devo nomear a DLL de 64 bits?

Mesmo nome de 32 bits: dois arquivos que fazem a mesma coisa, têm o mesmo nome, mas são totalmente não intercambiáveis. Não é uma receita para problemas de confusão e suporte?

Nomes diferentes (por exemplo, produto.dll e produto64.dll): agora os aplicativos do cliente precisam saber se estão executando 32 bits ou 64 bits para fazer referência à minha DLL, e há idiomas em que isso não é conhecido até que seja executado tempo - .Net sendo apenas um exemplo. E agora todos os clientes compilados estaticamente precisam condicionar as declarações de importação: se Target = Win64 então importe o BLAH do "Product64.dll" else importar blá do "product.dll" endif

O produto contém grandes quantidades de código C e um grande pedaço de C ++ - portá -lo para C# não é uma opção.

Adendo? Sugestões?

Foi útil?

Solução 3

Decidi seguir a Microsoft sobre isso, que mantiveram os mesmos nomes para as DLLs no System32 quando foram para 64 bits. Em Win7/64, System32 Avicap32.dll é uma DLL de 64 bits!

Há alguma confusão em potencial para mim e meus clientes, com DLLs de 32 e 64 bits com o mesmo nome. No entanto, acho que seria pior fazer com que todos os meus clientes tenham que tornar seu código largura de palavras sensível. Especialmente os desenvolvedores .NET, que geralmente podem deixar sua plataforma de destino definida como 'AnyCPU'.

Outras dicas

Aplicativos do cliente não faça tem que "saber" que são de 32 ou 64 bits. O sistema operacional carrega automaticamente as DLLs do local apropriado, porque não é possível carregar uma DLL de 32 bits em um processo de 64 bits e não é possível carregar uma DLL de 64 bits em um processo de 32 bits.

Se um aplicativo de 32 bits tenta Carregue algo do System32, o sistema operacional redirecionará silenciosamente para o diretório syswow64, forçando a versão de 32 bits a carregar.

Por ter nomes diferentes, você derrota todo esse mecanismo. Um mecanismo construído especificamente para permitir que você use o mesmo nome.

Por que não prefixar as DLLs com um sublinhado ... como Product_32.dll e Product_64.dll? Ou indicou isso usando um prefixo de plataforma - Product_x86_32.dll e Product_x86_64.dll? Pelo menos isso vai limpar a confusão da nomeação da DLL ... o que você acha?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top