से कॉलबैक प्राप्त नहीं कर रहा है मैं एक C++ ऐप के अंदर से स्विंग घटकों के बारे में जानकारी प्राप्त करने के लिए जावा एक्सेस ब्रिज का उपयोग करने का प्रयास कर रहा हूं। हालांकि, मैं कभी भी कॉलबैक में से कोई भी कॉल नहीं करता हूं। मैंने विंडोज़ को एन्जावा विन्डो() को प्रत्येक हैंडल पर कॉल करने की कोशिश की, लेकिन यह हमेशा झूठी वापसी करता है। किसी भी विचार पर यह स्पष्ट रूप से क्यों काम नहीं कर रहा है?जावा एक्सेस ब्रिज
मुझे लगता है कि यह पुल स्थापना के बजाए मेरे ऐप के साथ एक समस्या है क्योंकि डेमो बंदर और फेरेट प्रोग्राम काम करते हैं, प्रारंभिक एसेसब्रिज() सच हो जाता है, और डीबगर से पता चलता है कि WindowsAccessBridge डीएल लोड हो गया है।
मैं जावा 6 का उपयोग कर रहा हूं, विंडोज विस्टा पर 13 अपडेट करता हूं और मुझे एक्सेस ब्रिज के संस्करण 2.0.1 लगता है।
JavaAccess::JavaAccess(void)
{
using namespace std;
BOOL isInitialized = initializeAccessBridge();
if(isInitialized)
{
cout << "Bridge Initialized!" << endl;
}
else
{
cout << "Initialization failed!" << endl;
return;
}
EnumWindows((WNDENUMPROC)EnumWndProc, NULL);
SetJavaShutdown(OnJavaShutdown);
SetFocusGained(OnFocusGained);
SetMouseClicked(OnMouseClicked);
}
JavaAccess::~JavaAccess(void)
{
shutdownAccessBridge();
}
void JavaAccess::OnJavaShutdown(long vmID)
{
using namespace std;
cout << "Java shutdown!" << endl;
}
void JavaAccess::OnFocusGained(long vmID, FocusEvent event, AccessibleContext context)
{
using namespace std;
cout << "Focus Gained!" << endl;
ReleaseJavaObject(vmID, event);
ReleaseJavaObject(vmID, context);
}
void JavaAccess::OnMouseClicked(long vmID, jobject event, jobject source)
{
std::cout << "Mouse clicked!" << std::endl;
ReleaseJavaObject(vmID, event);
ReleaseJavaObject(vmID, source);
}
BOOL CALLBACK JavaAccess::EnumWndProc(HWND hwnd, LPARAM lparam)
{
if (IsJavaWindow(hwnd))
{
std::cout << "Found Java Window!" << std::endl;
return FALSE;
}
else
{
std::cout << "Still looking" << std::endl;
return TRUE;
}
}
सभी कॉलबैक स्थिर कार्य हैं।
मुझे संदेह होना शुरू हो गया था कि इसे एक संदेश पंप की आवश्यकता है, और मुझे आपकी व्याख्या क्यों पसंद है। मैंने अभी अपना परीक्षण संशोधित किया है और यह अब काम करता है। यहां कुछ उदार अंक दिए गए हैं! – James
संदेश लूप पर बिंदु के लिए धन्यवाद। पुन :: कंसोल ऐप। सी # में आप [एप्लिकेशन.रुन()] (https://msdn.microsoft.com/en-us/library/system.windows.forms.application.run.aspx) का उपयोग कर सकते हैं, बिना किसी तर्क के सामान्य तर्क बनाने के लिए संदेश पाश यदि आप डीएलएल को कोई कॉल करना चाहते हैं तो किसी अन्य थ्रेड से ऐसा करें। सी ++ के लिए [जावा एक्सेस ब्रिज डाउनलोड] (http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136191.html) में JavaMonkey.cpp स्रोत कोड है जिसमें मानक GetMessage है, अनुवाद संदेश , डिस्पैच मैसेज लूप। – Daniel