2012-01-29 6 views
5

मैं दो प्रोग्रामों को जोड़ने के लिए एक प्रोजेक्ट शुरू करने जा रहा हूं, एक सी # में, और सी ++ में से एक। मेरे पास पहले से ही एक कामकाजी सी # प्रोग्राम है, जो स्वयं के अन्य संस्करणों से बात करने में सक्षम है। सी ++ संस्करण से शुरू होने से पहले, मैंने कुछ मुद्दों के बारे में सोचा है:प्रोटोकॉल बफर, C++ से बात करने के लिए सी # प्राप्त करना: समस्याएं और स्कीमा समस्याएं टाइप करें

1) मैं प्रोटोबफ-नेट v1 का उपयोग कर रहा हूं। मैं इसे serializer से .proto फ़ाइलों को लेता हूं, सी ++ संस्करण के लिए टेम्पलेट्स के रूप में क्या आवश्यक हैं? एक Google खोज ने पास्कल आवरण के बारे में कुछ बताया, लेकिन मुझे कोई जानकारी नहीं है कि यह महत्वपूर्ण है या नहीं।

2) यदि कोई .NET प्रकारों में से एक सी ++ में प्रत्यक्ष समकक्ष नहीं है तो मैं क्या करूँ? यदि मेरे पास दशमलव या शब्दकोश है तो क्या होगा? क्या मुझे किसी भी तरह से .proto फ़ाइलों को संशोधित करना है और डेटा को एक अलग आकार में squish करना है? (मैं फाइलों की जांच करूँगा और देख सकता हूं कि मैं इसे समझ सकता हूं)

3) क्या कोई अन्य गठिया है जो लोग सोच सकते हैं? बाइनरी प्रारूप और उस तरह की चीजें?

EDIT मैंने अब प्रोटो फाइलों में से एक को देखा है। ऐसा लगता है कि .NET विशिष्ट सामग्री टैग की गई है उदाहरण के लिए bcl.DateTime या bcl.Decimal। प्रोटो परिभाषाओं में उपप्रकार शामिल हैं। मुझे यकीन नहीं है कि बीसीएल प्रकारों के बारे में क्या करना है, हालांकि। अगर मेरा सी ++ प्रोग एक दशमलव देखता है, तो यह क्या करेगा?

उत्तर

4
  1. हां, प्रोटो फाइलें संगत होनी चाहिए। आवरण सम्मेलनों के बारे में है, जो वास्तविक कार्यक्षमता को प्रभावित नहीं करना चाहिए - केवल जेनरेट कोड आदि

  2. यह नहीं है कि .NET में सीधे तुलनीय प्रकार है या नहीं - यह है कि प्रोटोकॉल बफर इस प्रकार का समर्थन करते हैं या नहीं महत्वपूर्ण है। प्रोटोकॉल बफर ज्यादातर सुंदर आदिम होते हैं - यदि आप कुछ भी बड़ा बनाना चाहते हैं, तो आपको अपने संदेश बनाना होगा।

  3. प्रोटोकॉल बफ़र्स की बात यह है कि यह सब द्विआधारी तार पर संगत बनाने के लिए है, तो वहाँ वास्तव में gotchas नहीं होना चाहिए ... नीतियों आदि वर्ज़निंग केवल एक चीज मैं कर सकते हैं के बारे में पता लगाने के लिए दस्तावेज़ पढ़ें इस बारे में सोचें कि जावा संस्करण में कम से कम, enum फ़ील्ड्स को वैकल्पिक बनाना एक अच्छा विचार है, और enum प्रकार को "अज्ञात" का शून्य मान दें, जिसका उपयोग तब किया जाएगा जब आप एक नए मान को deserialize करने का प्रयास करें जो नहीं है अभी तक deserializing कोड में समर्थित है।

3

जॉन की अंक के लिए कुछ मामूली परिवर्तन:

  • Protobuf शुद्ध v1 एक Getaproto जो इंटरॉप प्रयोजनों मैं एक .proto से शुरू की सिफारिश करेंगे लिए एक प्रारंभिक बिंदु के साथ मदद कर सकता है, तथापि, है; प्रोटोबफ-नेट यह भी काम कर सकता है, या तो "प्रोटोजेन" के माध्यम से, या वीएस एडिन
  • इसके अलावा, आपको तब तक मेरी समस्या नहीं होनी चाहिए जब तक कि आप सभी फ़ाइलों को बाइनरी के रूप में नहीं मानते; पाठ मोड में फ़ाइलों को खोलने से दुःख
+0

मुझे यकीन नहीं है कि भेद क्या है? मैंने स्ट्रिंग प्राप्त करने के लिए Serializer.GetProto का उपयोग किया, जो पूरी तरह से पठनीय था और एक .proto फ़ाइल की तरह दिखता था। – Carlos

संबंधित मुद्दे