Ошибка компиляции MIDL (и, возможно, вопрос создания файла idl) - PullRequest
1 голос
/ 15 июля 2010

Мы собираемся переместить наше приложение с VS2008 на VS2010.

Мы генерируем некоторые COM-объекты с помощью «атрибутивного программирования», и IDL генерируется автоматически.

Директивы импорта для обоих файлов различны, и компиляция VS2010 не удалась.

на VS2008 генерирует что-то вроде:

import "docobj.idl";

на 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";

Когда IDL компилируется на VS2010, он генерирует следующие ошибки

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

удаление вручную директивы импорта "wincrypt.idl" устраняет ошибку компиляции, но это не является решением, поскольку idl генерируется автоматически.

Я не уверен, почему два IDL отличаются и что отвечает за добавление директив импорта; или даже как исправить ошибку компиляции MIDL.

Есть идеи?

Заранее спасибо.

Макс.

Ответы [ 2 ]

3 голосов
/ 15 июля 2010

отсутствует

 #import "ocidl.idl"

Вы можете исправить это, используя атрибут [importidl] в вашем коде.

Атрибутивное программирование было немного ошибкой, оно, по сути, устарело, когда было удалено как опция для мастера проектов ATL в VS2008. Для долгосрочного обслуживания вашей кодовой базы рассмотрите возможность ее удаления. Вы можете использовать автоматически сгенерированный .idl, чтобы начать это.

1 голос
/ 19 июня 2013

Возможно, я неправильно использовал атрибут [importidl], но не смог получить ответ Ганса, чтобы решить эту проблему.Но исправление здесь сработало.Просто добавьте это в начало вашего файла stdafx.h:

[idl_quote("import \"ocidl.idl\";")];
...