Pergunta

É possível utilizar uma biblioteca C ++ estático (lib) compilado usando Visual Studio 6 no Visual Studio 2008?

Foi útil?

Solução

Eu não deveria pensar por que não - contanto que você mantenha os limites de memória CRT habituais (ou seja, se você alocar memória dentro de uma função de biblioteca, sempre livrá-lo de dentro da biblioteca - chamando uma função no lib para fazer o libertação).

essa abordagem funciona bem para DLLs compilados com todos os tipos de compiladores, bibliotecas estaticamente ligadas deve estar ok também.

Outras dicas

Ela realmente depende. O lib expor apenas as funções 'externo 'C'' onde a memória é ou geridos por métodos Win32 retas (CoTaskMemAlloc, etc) ou o chamador não libera memória alocados pelo receptor ou vice-versa? Você só dependem de bibliotecas básicas que não mudaram muito desde VS 6? Se assim for, você deve ser fino.

Existem 2 coisas básicas para assistir. Mudanças a variáveis ??globais utilizadas por bibliotecas 3rd-party, e as mudanças na estrutura de estruturas, classes, etc definidas por essas bibliotecas 3rd-party. Por exemplo, o alocador de memória CRT provavelmente mudou suas estruturas de gestão de alocação escondidos entre as 2 versões, assim que ter uma versão da biblioteca de alocar um pedaço de memória e ter um outro livre ele provavelmente irá causar um acidente.

Como outro exemplo, se você expor classes C ++ através da interface e eles dependem de MS tempo de execução bibliotecas como MFC, há uma chance de que o layout de classe mudou entre VS 6 e VS 2008. Isso significa que o acesso a um membro / campo em a classe poderia ir para a coisa errada e causar resultados imprevisíveis. Você provavelmente está metralhado se o lib usa MFC em qualquer capacidade. MFC define e usa internamente toneladas de globals, e qualquer acesso a globals MFC pelas operações no lib poderia causar falhas se a infra-estrutura MFC mudou no ambiente de hospedagem (que mudou muito desde VS 6, BTW).

Eu não explorou exatamente quais alterações foram feitas nos cabeçalhos MFC, mas eu vi um comportamento imprevisível entre binários de classe baseados em ATL MFC / compilados em diferentes versões VS.

Em cima dessas questões, há um risco para funções como strtok () que dependem de variáveis ??globais estáticos definidos nas bibliotecas run-time. Eu não tenho certeza, mas eu estou preocupado essas variáveis ??estáticas podem não ser inicializado corretamente se você usar um cliente esperando o CRT single-threaded em um segmento criado na multi-threaded CRT. Olhada na documentação para _beginthread () para mais informações.

Sim. Não deve haver problemas com isso em tudo. Como gbjbaanb mencionado, você precisa cuidar da sua memória, mas VS2008 irá trabalhar com ele ainda. Contanto que você não está tentando misturar CLR, (gerenciado) código com ele. Eu recomendo contra isso, se possível. Mas, se você está falando de C cru ou código C ++, com certeza, ele vai trabalhar.

O que exatamente você está pensando em usar? (O que é nesta biblioteca?) Você já tentou fazê-lo já, mas está tendo problemas, ou você está apenas verificando antes de você perder um monte de tempo tentando fazer algo a obra que só vai?

Claro que ele vai trabalhar.

Você está perguntando onde no VS2008 ao código as referências?

Se assim for, vá para o proj adereços -> Linker -> Entrada em propriedades de configuração nas páginas de propriedades. Procure por "dependências adicionais" e código do LIB lá.

Vá para adereços proj -> Linker -.> Geral e código o caminho libs em "diretórios adicionais Library"

Isso deve fazê-lo !!

Há casos foram a resposta é não, quando nos mudamos de VS6 para VS2k5 tivemos que reconstruir todas as nossas bibliotecas, como o modelo de memória tinha mudado, e as funções de CRT, onde diferente.

Houve um punhado de alterações significativas entre VC6, VS2003, VS2005 e VS2008. Visual C ++ (em VS2005) parou de suporte para a biblioteca de CRT de segmento único, ligado estaticamente. Alguns quebra muda enumerado aqui e aqui . Essas mudanças vão afetar o seu uso de VC6 construído libs em versões posteriores.

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