BCB v11.1.5 Clang编译器无法编译MSVC MIDL生成代码求助
升级C++Builder和MSVC后RPC代码编译问题
我维护一个遗留项目,其中MSVC编译的Windows服务通过RPC接收C++Builder编译的Windows服务的通信,MSVC的MIDL编译器负责生成RPC通信所需的C代码。目前正在从BCB v6升级到BCB v11.1.5(基于Clang编译器),同时从MSVC v6升级到MSVC 2022,但BCB的Clang编译器无法编译MIDL生成的C代码。
示例IDL文件
import "oaidl.idl"; import "ocidl.idl"; [ uuid(e4122230-9f4d-11d2-8890-0060083b976d), version(2.0), pointer_default(unique) ] interface TestCom { struct RPCTStatus { short ProcessState; }; void ReadData([in] handle_t binding_handle, [in] long _no, [in] long stream, [in, out] long* nbytes, [out, size_is(, *nbytes)] byte** p_p_data, [out] long* completion_code); }
MIDL生成的客户端存根代码片段
#pragma warning( disable: 4211 ) /* redefine extern to static */ #pragma warning( disable: 4232 ) /* dllimport identity*/ #pragma warning( disable: 4024 ) /* array to pointer mapping*/ #pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */ /*lots of other code*/ extern const test_MIDL_TYPE_FORMAT_STRING test__MIDL_TypeFormatString; extern const test_MIDL_PROC_FORMAT_STRING test__MIDL_ProcFormatString; extern const test_MIDL_EXPR_FORMAT_STRING test__MIDL_ExprFormatString; /*lots of other code*/ static const test_MIDL_TYPE_FORMAT_STRING test__MIDL_TypeFormatString = {/*a big definition*/}; /*lots of other code*/
BCB编译器报错信息
[bcc32c Error] test_c.c: static declaration of 'test__MIDL_TypeFormatString' follows non-static declaration.
当前困境
- MSVC中可以通过
#pragma warning( disable: 4211 )忽略该错误,但找不到BCB v11.1.5中对应的兼容开关(已尝试所有能找到的兼容选项)。 - 不知道如何配置MIDL编译器,让它不生成这种先extern声明再static定义的语法。
- 回退到BCB“经典”编译器不可行:相关代码位于静态库中,会链接到我的BCB项目及其他众多库,若回退则所有内容都需切换到“经典”编译器,这和停留在旧版BCB v6没有区别。
内容的提问来源于stack exchange,提问作者AndyB
相关产品推荐
相关产品推荐

