MIDL erro de compilação (e talvez arquivo idl geração de pergunta)
-
16-09-2020 - |
Pergunta
Nós estamos olhando para mudar a nossa aplicação a partir do VS2008 para o VS2010.
Nós gerar alguns objetos com o "atribuído programação" e o IDL são gerados automaticamente.
A importação de directivas para ambos os arquivos são diferentes e a compilação falha no VS2010.
no VS2008, gera algo como :
import "docobj.idl";
no VS 2010
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\exdisp.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\shldisp.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\prsht.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\mshtmhst.idl";
import "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\mshtml.idl";
import "c:\program files (x86)\microsoft sdks\windows\v7.0a\include\dimm.idl";
import "c:\program files (x86)\microsoft sdks\windows\v7.0a\include\dispex.idl";
Quando o IDL é compilado no VS2010 ele gera os seguintes erros
20> Microsoft (R) 32b/64b MIDL Compiler Version 7.00.0555
20> Copyright (c) Microsoft Corporation. All rights reserved.
20> Processing .\_my_idl.idl
20> _my_idl.idl
20> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl
20> wincrypt.idl
20>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl(47): error MIDL2025: syntax error : expecting a type specification or a storage specifer or a type qualifier near "WCHAR"
20>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincrypt.idl(47): error MIDL2026: cannot recover from earlier syntax errors; aborting compilation
20>LINK : fatal error LNK1240: failed to compile IDL content
como remover manualmente o "wincrypt.idl" importar diretiva remove o erro de compilação, mas isso não é uma solução, pois o idl são gerados automaticamente.
Eu não sou certo porque os dois IDL são diferentes e que é responsável para adicionar a importação de directivas;ou até mesmo como corrigir o MIDL erro de compilação.
Qualquer idéias ?
Obrigado antecipadamente.
Max.
Solução
Ele está em falta
#import "ocidl.idl"
Você pode corrigi-lo usando o [importidl] atributo em seu código.
Atribuído, a programação foi um pouco de um engano, meteu-se, essencialmente, preterido quando ele foi removido como uma opção para o ATL assistente de Projeto no VS2008.Para a manutenção a longo prazo da sua base de código, tente removê-lo.Você pode usar o auto-gerado .idl como forma de obter o que começou.
Outras dicas
Talvez eu estava usando o [importidl]
atributo errado, mas eu não poderia obter de Hans resposta para corrigir este problema.Mas a correcção aqui funcionou.Basta adicionar este topo de sua stdafx.h ficheiro:
[idl_quote("import \"ocidl.idl\";")];