使用 mingw64 c++ 编译 imapi2 应用程序时 imapi2.h 中的错误“没有类型的 '__RPC__range' 声明”

Posted

技术标签:

【中文标题】使用 mingw64 c++ 编译 imapi2 应用程序时 imapi2.h 中的错误“没有类型的 \'__RPC__range\' 声明”【英文标题】:errors in imapi2.h when compiling imapi2 app with mingw64 c++ "declaration of '__RPC__range' with no type"使用 mingw64 c++ 编译 imapi2 应用程序时 imapi2.h 中的错误“没有类型的 '__RPC__range' 声明” 【发布时间】:2014-04-20 04:12:03 【问题描述】:

我正在尝试使用 imapi2 通过在 windows 上使用 mingw 编译的 c++ 程序写入 cd-rw。我正在查看一个 Visual Studio c++ 示例。我从 Microsoft SDK 7.1 将 imapi2.h 复制到了我的项目中,但是当我在标题中包含 #include "imapi2.h" 并尝试编译时,我从 imapi2.h 文件中得到了一堆错误。我认为这是因为头文件是为 Visual Studio 设置的。错误如下。是否可以使用mingw编译器来使用imapi2?谢谢

g++ -O0 -g3 -Wall -c -fmessage-length=0 -o cdtest.o "..\\cdtest.cpp"

In file included from ..\cdtest.h:7:0,

                 from ..\cdtest.cpp:2:

..\imapi2.h:17:0: warning: ignoring #pragma warning  [-Wunknown-pragmas]

#pragma warning( disable: 4049 )  /* more than 64k source lines */

^

In file included from ..\cdtest.h:7:0,

                 from ..\cdtest.cpp:2:

..\imapi2.h:1148:35: error: ISO C++ forbids declaration of '__RPC__range' with no type [-fpermissive]

typedef /* [range] */ __RPC__range(0,0xffff) ULONG ULONG_IMAPI2_DVD_STRUCTURE;

                                   ^

..\imapi2.h:1148:35: error: typedef '__RPC__range' is initialized (use decltype instead)

..\imapi2.h:1150:35: error: ISO C++ forbids declaration of '__RPC__range' with no type [-fpermissive]

typedef /* [range] */ __RPC__range(0,0xfffffff) ULONG ULONG_IMAPI2_ADAPTER_DESCRIPTOR;

                                   ^

..\imapi2.h:1150:35: error: typedef '__RPC__range' is initialized (use decltype instead)

..\imapi2.h:1152:35: error: ISO C++ forbids declaration of '__RPC__range' with no type [-fpermissive]

typedef /* [range] */ __RPC__range(0,0xfffffff) ULONG ULONG_IMAPI2_DEVICE_DESCRIPTOR;

                                   ^

..\imapi2.h:1152:35: error: typedef '__RPC__range' is initialized (use decltype instead)

..\imapi2.h:1154:35: error: ISO C++ forbids declaration of '__RPC__range' with no type [-fpermissive]

typedef /* [range] */ __RPC__range(0,0x10002) ULONG ULONG_IMAPI2_DISC_INFORMATION;

                                   ^

..\imapi2.h:1154:35: error: typedef '__RPC__range' is initialized (use decltype instead)

..\imapi2.h:1156:35: error: ISO C++ forbids declaration of '__RPC__range' with no type [-fpermissive]

typedef /* [range] */ __RPC__range(0,0x10002) ULONG ULONG_IMAPI2_TRACK_INFORMATION;

                                   ^

..\imapi2.h:1156:35: error: typedef '__RPC__range' is initialized (use decltype instead)

..\imapi2.h:1158:35: error: ISO C++ forbids declaration of '__RPC__range' with no type [-fpermissive]

typedef /* [range] */ __RPC__range(0,0x100) ULONG ULONG_IMAPI2_FEATURE_PAGE;

                                   ^

..\imapi2.h:1158:35: error: typedef '__RPC__range' is initialized (use decltype instead)

..\imapi2.h:1160:35: error: ISO C++ forbids declaration of '__RPC__range' with no type [-fpermissive]

typedef /* [range] */ __RPC__range(0,0x101) ULONG ULONG_IMAPI2_MODE_PAGE;

                                   ^



[. . .]



                                                                                                                                   ..\imapi2.h:1194:47: error: expected ')' before numeric constant

             /* [range][in] */ __RPC__in_range(6,16) ULONG CdbSize,

                                               ^

..\imapi2.h:1194:47: error: expected ')' before numeric constant

..\imapi2.h:1194:46: error: expected ';' at end of member declaration

             /* [range][in] */ __RPC__in_range(6,16) ULONG CdbSize,

                                              ^

..\imapi2.h:1194:47: error: expected unqualified-id before numeric constant

             /* [range][in] */ __RPC__in_range(6,16) ULONG CdbSize,

                                               ^

..\imapi2.h:1200:31: error: '__RPC__in_range' has not been declared

             /* [range][in] */ __RPC__in_range(6,16) ULONG CdbSize,



[. . .]

【问题讨论】:

【参考方案1】:

为了克服这些错误,我发现每个地方都有一个#include "imapi2.h",它需要继续使用#include rpcsal.h。作为我系统上的替代方案,在每个 #include "imapi2.h" 之前添加以下行也可以。

#define __RC__range(min,max)

#define __RC__in_range(min,max)

【讨论】:

以上是关于使用 mingw64 c++ 编译 imapi2 应用程序时 imapi2.h 中的错误“没有类型的 '__RPC__range' 声明”的主要内容,如果未能解决你的问题,请参考以下文章

使用 MinGW C++ 编译 64 位静态库以在 Java (JNI) 中使用

Windows下的 C++ 编译工具(MinGW-w64 + CMake)

查找 imapi2 com 对象的 uuid/标头或让 __uuidof 在 mingw 上工作

在 minGW-W64 g++ 中编译的 C++ 代码不能在 Ubuntu g++ 中编译

c++编译thread程序时加了<thread>但他就是给我报错说没加,我装了个mingw-w64也不行,咋回事?

GCC 8.1.0/MinGW64 编译的 OpenMP 程序崩溃寻找 cygwin.s?