2016-06-01 9 views
6

मैं साझा स्मृति का उपयोग कर सी ++ एप्लिकेशन से सी # एप्लिकेशन में डेटा स्ट्रीम करने का प्रयास कर रहा हूं। उदाहरण मैंने पाया के आधार पर, मेरे पास है:साझा मेमोरी पर सी ++ से सी # तक स्ट्रीम डेटा

C++ (भेजने)

struct Pair { 
    int length; 
    float data[3]; 
}; 

#include <windows.h> 
#include <stdio.h> 

struct Pair* p; 
HANDLE handle; 

float dataSend[3]{ 22,33,44 }; 

bool startShare() 
{ 
    try 
    { 
     handle = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(Pair), L"DataSend"); 
     p = (struct Pair*) MapViewOfFile(handle, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, sizeof(Pair)); 
     return true; 
    } 
    catch(...) 
    { 
     return false; 
    } 

} 


int main() 
{ 

    if (startShare() == true) 
    { 

      while (true) 
      { 
       if (p != 0) { 

       //dataSend[0] += 1; // here the value doesn't refresh 
       for (int h = 0; h < 3; h++) 
       { 
        p->data[h] = dataSend[h]; 
       } 
      //dataSend[0] += 1; // here it does 
      } 


     else 
      puts("create shared memory error"); 
    } 
    } 
    if (handle != NULL) 
     CloseHandle(handle); 
    return 0; 
} 

सी # (प्राप्त)

namespace sharedMemoryGET 
{ 
    class Program 
    { 
     public static float[] data = new float[3]; 
     public static MemoryMappedFile mmf; 
     public static MemoryMappedViewStream mmfvs; 

     static public bool MemOpen() 
     { 
      try { 
       mmf = MemoryMappedFile.OpenExisting("DataSend"); 
       mmfvs = mmf.CreateViewStream(); 
       return true; 
      } 
      catch 
      { 
       return false; 
      } 

     } 

     public static void Main(string[] args) 
     { 
      while (true) 
      { 
       if (MemOpen()) 
      { 

        byte[] blen = new byte[4]; 
        mmfvs.Read(blen, 0, 4); 
        int len = blen[0] + blen[1] * 256 + blen[2] * 65536 + blen[2] * 16777216; 

        byte[] bPosition = new byte[12]; 
        mmfvs.Read(bPosition, 0, 12); 
        Buffer.BlockCopy(bPosition, 0, data, 0, bPosition.Length); 
        Console.WriteLine(data[0]); 
       } 
      } 
     } 
    } 
} 

C++ पक्ष चर कभी अपडेट, मुझे लगता है कि मैं कुछ छूट गया है बनाने मेरे आई-लूप में। इसके अतिरिक्त, हमेशा चलने वाला लूप यहां जाने का सबसे अच्छा तरीका है? क्या यह एक और अधिक कुशल प्रणाली बनाने के लिए सी # पक्ष से डेटा को 'अनुरोध' करने का कोई तरीका है? धन्यवाद।

उत्तर

2

.. वास्तव में यह काम कर रहा है, मेरे पास गलत स्थान पर चर के लिए अद्यतन था। मैंने संपादित किया है और दूसरों के लिए कोड छोड़ दूंगा।

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