मैं सी # + सी पुस्तकालय में सी # से संरचना को पारित करने की कोशिश कर रहा हूं। मैं संरचना को एक ऑब्जेक्ट के रूप में पास करता हूं, और सी ++ फ़ंक्शन इसे पॉइंटर (शून्य *) के रूप में अपेक्षा करता है।मैं एक संरचना के लिए एक सूचक के रूप में एक संरचना कैसे मार्शल कर सकते हैं?
मुझे संरचना को पार करने में समस्या आ रही है।
"मार्शल नहीं किया जा सकता 'पैरामीटर # 1':
[DllImport("MockVadavLib.dll", CharSet = CharSet.Ansi)] public static extern IntPtr TheFunction([MarshalAs(UnmanagedType.LPStruct)] UserRec userRec);
यहाँ रन-टाइम अपवाद पाठ मैं मिलता है अमान्य कामयाब/अप्रबंधित प्रकार संयोजन (यह मान प्रकार Struct के साथ रखा जाना चाहिए)। "
हालांकि मुझे एक एमएसडीएन आलेख मिला जो वास्तव में इस संदर्भ में एलपीएसट्रक्चर का उपयोग करता है।
यह मेरा संरचना मैं मार्शल करने के लिए कोशिश कर रहा हूँ है:
[StructLayout(LayoutKind.Sequential)]
public struct UserRec {
[MarshalAs(UnmanagedType.I4)]
public int userParam1;
}
यह वह जगह है सी ++ समारोह:
MOCKVADAVLIB_API tVDACQ_CallBackRec * TheFunction(void * userParams) {...
मुझे लगता है कि आपको इस मामले में [मार्शल] की भी आवश्यकता नहीं है। –
@ एंटन, आप सही हैं (अपडेटेड) – JaredPar
अंतिम कार्य परिणाम: सार्वजनिक स्थैतिक बाहरी IntPtr TheFunction ([मार्शलएएस (UnmanagedType.Struct), में] ref UserRec userRec); और [मुर्शल] यहां बस इसे स्पष्ट करने के लिए है, लेकिन आवश्यक नहीं है। –