簡體   English   中英

Protobuf動態和靜態庫

[英]Protobuf dynamic and static library

我有兩個自定義的protobuf庫。 一種是動態的,另一種是靜態的。 靜態庫有一條消息:

message DataType
{
    int number = 1;
    string name_1 = 2;
    string name_2 = 3;
    string name_3 = 4;
}

// The dynamic lib has a message:
message MyMessage
{
    DataType type = 1;
}

我通過將靜態原型庫鏈接到它來構建動態原型庫。 然后,我建立了鏈接動態原型庫的exe應用程序。

問題是當我設置name_1,name_2或name_3之一時,它們都具有此值。 我認為所有這些字符串都具有相同的緩沖區。 如果將動態庫轉換為靜態庫,則問題消失。 誰能解釋我這是怎么回事? 謝謝。

如果未設置字段,則應返回空字符串。 請在此處檢查文檔。

如果您使用的是版本2,則可以查詢該字段是否由has_name_x()設置。

順便說一下,有幾種設置值的方法:

  • 最簡單的方法是創建一個副本: void set_name_x(const string& value)
  • 對於C++11 ,可以移動字符串值: void set_name_x(string&& value)
  • 您可以傳遞指針: void set_allocated_name_x(string* value)
  • 您可以獲取指向存儲的字符串的指針: string* mutable_name_x()

我建議您熟悉protobuf並讓其管理內存並使用set_name_x 如果這還不夠,您可以使用手動內存管理來優化代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM