Errore di compilazione midl (e forse domanda di generazione di file IDL)
-
16-09-2020 - |
Domanda
Stiamo cercando di spostare la nostra applicazione da VS2008 a VS2010.
Genera alcuni oggetti COM con "Programmazione attribuita" e l'IDL viene generato automaticamente.
Le direttive di importazione per entrambi i file sono diverse e la compilation fallisce su VS2010.
su VS2008, genera qualcosa come:
import "docobj.idl";
.
su 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 l'IDL è compilato su VS2010 Genera i seguenti errori
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
.
Rimozione manuale della direttiva sull'importazione "WinCrypt.idl" rimuove l'errore di compilazione, ma questa non è una soluzione poiché l'IDL è generato automaticamente.
Non sono certo perché i due IDL sono diversi e ciò che è responsabile di aggiungere le direttive sull'importazione;o anche come fissare l'errore di compilazione midl.
Qualche idea?
Grazie in anticipo.
max.
Soluzione
Manca
#import "ocidl.idl"
.
È possibile risolverlo utilizzando l'attributo [ImportIdl] nel tuo codice.
La programmazione attribuita è stata un po 'di errore, è diventato essenzialmente deprecato quando è stato rimosso come opzione per la procedura guidata del progetto ATL in VS2008.Per il mantenimento a lungo termine della tua base di codice, considerare la rimozione.È possibile utilizzare l'auto-generato .IDL come un modo per iniziare.
Altri suggerimenti
Perhaps I was using the [importidl]
attribute wrong, but I couldn't get Hans' answer to fix this problem. But the fix here worked. Just add this to the top of your stdafx.h file:
[idl_quote("import \"ocidl.idl\";")];