生成使用协议缓冲区的DLL 我正在使用一个使用我创建的ProtoBuF类型的C++(vs2017)项目。
但是,该项目需要所述protobuf类型的生成使用协议缓冲区的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
.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。