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.

È stato utile?

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\";")];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top