2012-02-03 1 views
0

я в настоящее время движется проект C++ от VS6 к VS2008, но я прийти через следующее сообщение об ошибке для многих функций в shobjidl.hВторой C Рычажный в shobjidl.h

error C2733: second C linkage of overloaded function 'HWND_UserMarshal' not allowed c:\program files\microsoft sdks\windows\v6.0a\include\shobjidl.h 28830 

Не только HWND_UserMarshall является а также другие функции в этом заголовке, такие как HWND_UserSize, HWND_UserFree и HWND_UserFree64.

Я понимаю, что эта ошибка возникает, когда внешняя функция «С» объявлена ​​с другим набором параметров, однако это находится в заголовке SDK, а не в том, что я могу изменить.

Есть ли у кого-нибудь какие-либо предложения о том, какие должны быть мои следующие шаги?

EDIT: заголовок является заголовком Microsoft и в верхней части содержит следующие комментарии

/* this ALWAYS GENERATED file contains the definitions for the interfaces */ 


/* File created by MIDL compiler version 7.00.0499 */ 
/* Compiler settings for shobjidl.idl: 
    Oicf, W1, Zp8, env=Win32 (32b run) 
    protocol : dce , ms_ext, c_ext, robust 
    error checks: allocation ref bounds_check enum stub_data 
    VC __declspec() decoration level: 
     __declspec(uuid()), __declspec(selectany), __declspec(novtable) 
     DECLSPEC_UUID(), MIDL_INTERFACE() 
*/ 
//@@MIDL_FILE_HEADING() 
+1

Как Макс сказал, что там, вероятно, есть макрос или #define, что вызывает проблемы. Попытайтесь выяснить, куда входит этот заголовок, и посмотреть, есть ли что-то очевидное. – Luke

ответ

1

ли эти заголовки, полученные из IDL файла? Если это возможно, вам, вероятно, придется сгенерировать их с помощью совместимого с VS2008 инструмента. Например, если вы используете TAO ORB необходимо загрузить последнюю версию (или версии 2008) и запустить инструмент:

tao_idl -Cw -GT shobjidl.idl 

Используя соответствующие флаги и пути.

EDIT: Из вашего обновления кажется, что вы предназначены для создания этого файла. MIDL - компилятор Microsoft IDL. Ознакомьтесь с документами на MSDN для получения информации о компиляторе: http://msdn.microsoft.com/en-us/library/windows/desktop/aa367300%28v=vs.85%29.aspx

1

К сожалению, я не знаком с этим заголовком или этими функциями. Однако я подозреваю, что существуют макросы C, предназначенные для контроля того, какие функции видны вам на основе препроцессора. И я подозреваю, что вы каким-то образом определили (или не определили) символы препроцессора таким образом, что получаете дубликаты определений функций.

Не знаком с заголовком, я не могу по-настоящему рекомендовать, что делать, чтобы получить только те функции, которые вы хотите. Возможно, я начну с чтения документации, просмотра конфигурации для аналогичных продуктов и чтения самого файла заголовка.

Смежные вопросы