shobjidl.h中的第二个C链接

时间:2012-02-03 14:14:51

标签: c++ visual-studio visual-studio-2008 visual-c++ linker

我目前正在将一个C ++项目从VS6迁移到VS2008,但是对于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。

我理解当使用不同的参数集声明extern“C”函数时会发生此错误,但这是在SDK标题中,而不是我可以更改的标题。

有没有人对我的下一步应该有什么建议?

编辑:标题是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(  )

2 个答案:

答案 0 :(得分:1)

这些标头是否是从IDL文件生成的?如果是这样,您可能需要使用符合VS2008标准的工具重新生成它们。 例如,如果您使用的是TAO ORB,则可以下载最新版本(或2008版本)并运行该工具:

tao_idl -Cw -GT shobjidl.idl

使用适当的标志和路径。

编辑:从您的更新中看起来您似乎要生成此文件。 MIDL是Microsoft IDL编译器。有关编译器的信息,请查看MSDN上的文档:http://msdn.microsoft.com/en-us/library/windows/desktop/aa367300%28v=vs.85%29.aspx

答案 1 :(得分:1)

不幸的是,我不熟悉这个标题或这些函数。但是,我怀疑有C宏意味着根据预处理器定义来控制哪些函数对您是可见的。我怀疑你以某种方式定义(或未定义)预处理器符号,使得你得到重复的函数定义。

不熟悉标题,我真的不建议你做什么来获得你想要的功能。我可能首先阅读文档,查看类似产品的配置,然后阅读头文件。