2017-11-30 7 views
6

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

struct GroupInfo 
{ 
    int     cMembers;           // Current # of members in the group. 
    char    saMembers[cMaxMembers][cMaxLoginID + 1];   // Members themselves. 
}; 

जब हम सी # में यह का एक उदाहरण घोषित करने के लिए कोशिश संकलक वैश्विक कहते हैं :: GROUPINFO उपलब्ध नहीं है:

यह C++ Struct है।

C++ हस्ताक्षर

int QueryGroup(char* sGroupName, 
    GroupInfo& gi); 

सी # हस्ताक्षर

VMIManaged.QueryGroup(sbyte*, GroupInfo*) 

मैं एक वर्ग बुलाया समूह जानकारी है

class GroupInfo 
{ 
    public int cMembers; 
    public sbyte[,] saMembers; 
} 

और जब मैं लागू करने के लिए है कि इस कोड का उपयोग मैं पाने की कोशिश एक नहीं कर सकते परिवर्तित त्रुटि

GroupInfo gi = new GroupInfo(); 

unsafe 
{ 
    sbyte* grpName; 
    fixed (byte* p = groupNameBytes) 
    { 
     grpName = (sbyte*)p; 
    } 
    return vmi.QueryGroup(grpName, gi); // cannot convert from class GroupInfo to GroupInfo* 
} 
+0

कुछ स्निपेट आपके द्वारा दिए गए से यह समझने के लिए इस मुद्दे को ठीक है कठिन है । क्या आप असफल होने वाले कोड की रेखा प्रदान कर सकते हैं? – mageos

+0

टिप्पणी magesos के लिए धन्यवाद मैंने असफल होने वाली रेखा के साथ पोस्ट को संशोधित किया है। – user2379915

+0

क्या आपने vmi.QueryGroup (grpName, &gi);? – mageos

उत्तर

2

आपको अपने ग्रुपडेटा कक्षा के लिए सी # में डिफ़ॉल्ट कन्स्ट्रक्टर के डिफ़ॉल्ट सुरक्षा स्तर की वजह से त्रुटि मिल रही है। यह फ़ाइल जिसमें आप इसका इस्तेमाल करने की कोशिश कर रहे हैं, से एक अलग फाइल में परिभाषित किया जाता है तो इस तरह यह परिभाषित करने से काम करना चाहिए:

class GroupInfo 
{ 
    public GroupInfo() {} 
    public int cMembers; 
    public sbyte saMembers[cMaxMembers][cMaxLoginID + 1]; 
};