Pergunta

Usando o Visual C ++ 2008 Express Edition. Estou vinculando meu aplicativo a uma biblioteca de importação (.lib) para uma DLL que pode ou não estar presente no sistema de destino. Antes de perguntar: não posso distribuir a DLL com meu aplicativo.

Se a DLL não estiver presente, assim que eu chamar uma função da DLL (mas não antes!), Recebo uma mensagem como

Este aplicativo não conseguiu iniciar porque a SomELibrary.dll não foi encontrada. A reinstalação do aplicativo pode corrigir esse problema.

O que eu quero acontecer, em vez disso, é que o aplicativo detecta que a DLL não está lá e simplesmente desativa a funcionalidade que depende disso. Eu poderia fazer uma ligação para LoadLibrary E veja se foi bem -sucedido, mas não tenho certeza se isso é suficiente. Talvez a biblioteca de importação faça mais trabalho nos bastidores?

É um simples LoadLibrary ligar suficiente? Caso contrário, o que mais eu preciso fazer? Isso pode ser feito?

Atualizar: Claro que posso usar LoadLibrary, e depois GetProcAddress Para cada uma das funções que quero usar. Mas isso é um aborrecimento, e eu esperava evitar isso e simplesmente usar a biblioteca de importação fornecida.

Foi útil?

Solução

É para isso que serve a opção Linker de atraso, mas não sei se a Edição Express suporta.

Outras dicas

Não, LoadLibrary() é exatamente o que você quer. A única conseqüência para usá-lo é o incômodo de configurar os ponteiros de função na DLL quando você carregar com sucesso a DLL, mas o processo para isso é bem coberto em outras partes da rede.

Se você for verificar aqui (Msdn) você verá isso quando LoadLibrary Falha no carregamento, a função retorna um valor nulo e você pode até verificar o erro específico (que deve ser um arquivo não encontrado) usando GetLastError função.

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