के माध्यम से एक स्ट्रिंग भेजना/प्राप्त करना हालांकि
कुछ
संसाधन ऑनलाइन हैं जो इस किसी न किसी विषय को संबोधित करते हैं, मुझे अभी भी एक उत्तर नहीं मिला है जो मेरे लिए काम करता है।
पोस्टमेसेज
मैं अपने VB.net प्रक्रिया और मेरे सी ++ प्रक्रिया के बीच पूर्ण संचार की इच्छा। मैं और सी ++ प्रक्रिया से करने के लिए एक स्ट्रिंग भेजने में सक्षम होना चाहते हैं, लेकिन कुछ समय के मैं प्राप्त करने की आवश्यकता के लिए:
सी ++ प्रक्रिया के लिए एक स्ट्रिंग भेजा जा रहा है, और यह से निपटने के।
यह कुछ बिंदुओं कि मैं पर अनिश्चित हूँ बनाता है, लेकिन मैं इस यथासंभव सरल रखने की कोशिश करता हूँ ...
में निम्नलिखित समारोह घोषणा का उपयोग वीबी;
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (_
ByVal hWnd As IntPtr, _
ByVal Msg As UInteger, _
ByVal wParam As IntPtr, _
ByVal lParam As String _
) As Boolean
और इस तरह का संदेश भेजना;
PostMessage(hWnd, SM_PING, Nothing, "schlampe")
सी ++ में संदेश पर कब्जा करने के लिए निम्न विधि घोषणा के साथ
;
LRESULT CALLBACK newWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
और परीक्षण के लिए कि क्या मैं स्ट्रिंग का उपयोग कर उपयोग कर सकता हूं;
char buffer[50];
sprintf(buffer, "Received: %s", (char *)lParam);
MsgBox(buffer);
मैं जानकारी है कि मैं अनावश्यक हो, लेकिन पूछने के लिए विश्वास है की एक बहुत कुछ अधिक स्किम्ड और यह तुमसे कहता दिया जाएगा।
मेरे समस्या यह है कि संदेश प्राप्त किया और "संभाला" है ... लेकिन सी ++ प्रक्रिया के द्वारा बनाई गई अपने परीक्षण संदेश शामिल नहीं है संदेश बॉक्स (: "प्राप्त:" इसे पढ़ता है) है।
तो, कैसे मैं एक स्ट्रिंग PostMessage/SendMessage के माध्यम से वीबी से सी ++ को भेज सकते हैं?
समाधान:
समाधान के लिए स्वीकार किए जाते हैं जवाब देखें ... लेकिन इसके अलावा, यहाँ कैसे मैं स्ट्रिंग (C++) प्राप्त है:
LRESULT CALLBACK newWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg) {
case WM_COPYDATA:
MsgBox("Received a WM_COPYDATA message");
COPYDATASTRUCT * pcds = (COPYDATASTRUCT *)lParam;
LPCTSTR lpszString = (LPCTSTR)(pcds->lpData);
MsgBox(lpszString);
return 1L;
}
return CallWindowProc(instance->OriginalProcessor(), hwnd, uMsg, wParam, lParam);
}
और अंत में, मैं को भारतीय दंड संहिता उदाहरण here इस्तेमाल किया संदेश भेजें। इस उदाहरण संदेश सी # का उपयोग कर भेजता है, लेकिन अवधारणा सब मैं जरूरत (नहीं है कि यह पार्क में टहलने वीबी लिए इस तरह के कोड में परिवर्तित करने के लिए उल्लेख करने के लिए) था। ध्यान दें कि मेरी वीबी कार्यान्वयन में, मैं एक अशक्त चरित्र के साथ स्ट्रिंग समाप्त करने के लिए जरूरत नहीं थी।
क्या विंडो संदेशों का उपयोग करने की आवश्यकता विशिष्ट है? या प्रक्रियाओं के बीच अंतिम लक्ष्य को पारित कर रहा है? उत्तरार्द्ध के लिए, [बेहतर तरीके] (http://en.wikipedia.org/wiki/Inter-process_communication) को प्राप्त करने के लिए हैं। – ulidtko
आपको इसे उपयोग करने से पहले 'COPYDATASTRUCT' के कुछ बुनियादी सत्यापन करना चाहिए। कुछ दुर्भावनापूर्ण एप्लिकेशन आपको 'WM_COPYDATA' संदेशों को फर्जी भेज सकते हैं। – jamesdlin