【问题标题】:Second C Linkage in shobjidl.hshobjidl.h 中的第二个 C 链接
【发布时间】:2012-02-26 03:35:26
【问题描述】:

我目前正在将一个 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 标题,顶部包含以下 cmets

/* 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(  )

【问题讨论】:

  • 就像 Max 所说的那样,可能有一个宏或 #define 某处导致了问题。尝试找出包含该标题的位置,看看是否有任何明显的地方。

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


【解决方案1】:

很遗憾,我不熟悉此标头或这些函数。但是,我怀疑有 C 宏旨在根据预处理器定义控制哪些函数对您可见。而且我怀疑您以某种方式定义(或未定义)预处理器符号,从而获得重复的函数定义。

不熟悉标题,我不能真正推荐如何获得你想要的功能。我可能会先阅读文档,查看类似产品的配置,然后阅读头文件本身。

【讨论】:

    【解决方案2】:

    这些标头是从 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      相关资源
      最近更新 更多