मेरे पास एक सी ++ - सीएलआर रैपर है जो सी # से कॉल की गई मानक सी ++ लाइब्रेरी के आसपास है। लाइब्रेरी से स्टेटस संदेश प्राप्त करने के लिए मैं मार्शल :: GetFunctionPointerForDelegate के माध्यम से C++ कोड में कॉलबैक को असाइन किए गए प्रतिनिधि का उपयोग करता हूं।सी ++ - सीएलआई से सी # के माध्यम से सी ++ - सीएलआई कॉलबैक और प्रतिनिधियों
इसने मुझे काम करने के लिए काफी समय लगाया है और मैं बहुत करीब हूं (मुझे लगता है)। सी # प्रतिनिधि को बुलाया जाता है लेकिन स्ट्रिंग सीमा पार सही ढंग से पारित नहीं होती है।
जब मैं सी ++ कोड से टेक्सकॉलबैक ("टेस्ट स्ट्रिंग") को कॉल करता हूं तो मुझे सी # फ़ंक्शन में वापस बकवास मिलता है। प्रबंधित आवरण के कॉलबैक स्थापित करने के लिए
--- मूल सी ++ वर्ग और कॉलबैक फ़ंक्शन ---
class Solver
{
private:
std::string TakesCallback(const std::string message)
{
return cb(message);
}
public:
// Declare an unmanaged function type that takes a string
typedef std::string (__stdcall* ANSWERCB)(const std::string);
ANSWERCB cb;
};
--- समारोह ----
// Set the delegate callback
void ManagedSolver::SetMessageCallback(SendMessageDelegate^ sendMessageDelegate)
{
_sendMessage = sendMessageDelegate;
// Use GetFunctionPointerForDelegate to get the pointer for delegate callback
IntPtr ip = Marshal::GetFunctionPointerForDelegate(sendMessageDelegate);
_solver->cb = static_cast<Solver::ANSWERCB>(ip.ToPointer());
}
--- सी # समारोह सी ++ \ CLR आवरण SetMessageCallBack के लिए पारित किया ----
private void Message(string message)
{
XtraMessageBox.Show(message, "Done", MessageBoxButtons.OK);
}
क्या आप वाकई प्रबंधित मतलब सी ++ हैं? सी ++ के लिए प्रबंधित एक्सटेंशन (मुझे लगता है) विजुअल स्टूडियो 2003 में समर्थित होना बंद कर दिया गया है। सी ++/सीएलआई इसका प्रतिस्थापन है, और यह एक पूरी तरह से अलग भाषा है ... –
हाय बिली, क्षमा करें आप बिल्कुल सही हैं। मेरा रैपर एक मानक सी ++ लाइब्रेरी के आसपास सी ++/सीएलआर है। मैंने शीर्षक और शरीर को अद्यतन किया है। –
ठीक है मैंने इसे हल किया है std :: स्ट्रिंग इंटरऑप के साथ काम नहीं करेगा जैसा कि यहां बताया गया है http://stackoverflow.com/questions/874551/stdstring-in-c मैं वापस आऊंगा और जवाब दूंगा जैसे ही स्टैक ओवरफ्लो मुझे अनुमति देता है। –