Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
生成使用协议缓冲区的DLL 我正在使用一个使用我创建的ProtoBuF类型的C++(vs2017)项目。_C++_Dll_Protocol Buffers - Fatal编程技术网

生成使用协议缓冲区的DLL 我正在使用一个使用我创建的ProtoBuF类型的C++(vs2017)项目。

生成使用协议缓冲区的DLL 我正在使用一个使用我创建的ProtoBuF类型的C++(vs2017)项目。,c++,dll,protocol-buffers,C++,Dll,Protocol Buffers,但是,该项目需要所述protobuf类型的.dll。默认情况下,每个类声明中的\uuu declspec(dllexport)都不存在,我在线了解到,可以通过使用以下命令行生成protobuf对象来添加它们: --cpp_out=dllexport_decl=MY_EXPORT_MACRO:output/directory 没有人解释什么是“我的导出”宏或如何定义它。当我第一次生成protobuf对象时,我使用了最基本的线条,它起了作用: protoc -I=$SRC_DIR --cpp_ou

但是,该项目需要所述protobuf类型的
.dll
。默认情况下,每个类声明中的
\uuu declspec(dllexport)
都不存在,我在线了解到,可以通过使用以下命令行生成protobuf对象来添加它们:

--cpp_out=dllexport_decl=MY_EXPORT_MACRO:output/directory
没有人解释什么是“我的导出”宏或如何定义它。当我第一次生成protobuf对象时,我使用了最基本的线条,它起了作用:

protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/my_file.proto

“我的导出”宏是什么,在哪里?和/或是否有其他方法使我的protobuf文件
.dll
兼容?

您也知道
\u declspec(dllimport)
,对吗?在构建DLL(带有
dllexport
注释)和DLL客户端(带有
dllimport
注释)时,使用相同类型定义的最简单方法是什么

在各种Win32 DLL开发中,使用宏切换注释是非常常见的做法,而不仅仅是protobuf DLL

通常定义如下:

#if BUILD_DLLX
#  define DLLX_API __declspec(dllexport)
#else
#  pragma comment('lib', 'dllx.lib')
#  define DLLX_API __declspec(dllimport)
#endif
然后您将使用
--cpp_out=dllexport\u decl=DLLX_API:$DST_DIR
,以便生成的头文件在正确的位置插入
DLLX_API
。然后使用
/DBUILD\u DLLX
构建DLL,以便导出类型和函数


DLL的使用者可以
#包含
完全相同的头文件,并且在其项目配置中没有
/DBUILD\u DLLX
,他们最终将导入。

感谢您提供的信息性答案!这段代码放在哪里?@JessicaChambers:在DLL的头文件中,该文件包含DLL导出的所有函数类型和原型。它应该是
#在DLL自己的代码和使用DLL的代码中都包含
d。