के लिए स्ट्रिंग टू पॉइंटर कनवर्ट करना मैं विंडोज़ में फ़ाइल के लिए प्रभावी अनुमतियों से पूछने के लिए जेएनए का उपयोग करने की कोशिश कर रहा हूं। आखिरकार, मैं GetEffectiveRightsFromAcl function का उपयोग करने की योजना बना रहा हूं, लेकिन ऐसा करने के लिए, मुझे एक जनसंख्या वाले TRUSTEE structure पर एक सूचक प्रदान करने की आवश्यकता है। जेएनए प्लेटफार्म (platform.jar) इस संरचना को परिभाषित नहीं करता है, इसलिए मैं इसे स्वयं परिभाषित करने की कोशिश कर रहा हूं।जेएनए
public static class TRUSTEE extends Structure {
public TRUSTEE() {
super();
}
public TRUSTEE(Pointer p) {
super(p);
read();
}
public Pointer pMultipleTrustee;
public int MultipleTrusteeOperation;
public int TrusteeForm;
public int TrusteeType;
public Pointer ptstrName;
}
मैं इस तरह की संरचना को भरने के लिए कोशिश कर रहा हूँ: यहाँ मैं अब तक राशि है
private TRUSTEE createTrusteeForCurrentUser() {
TRUSTEE result = new TRUSTEE();
result.TrusteeForm = TRUSTEE_FORM.TRUSTEE_IS_NAME;
result.TrusteeType = TRUSTEE_TYPE.TRUSTEE_IS_USER;
String strName = "CURRENT_USER";
// How can I set result.ptstrName using strName?
}
This Google Groups thread संरचनाओं में String
क्षेत्रों का उपयोग करते समय एक char *
के लिए कहा जाता है की सिफारिश की। हालांकि, मुझे नहीं लगता कि यह मेरी स्थिति में उपयुक्त है, ptstrName
फ़ील्ड को TrusteeForm
के मान के आधार पर विभिन्न प्रकार की चीजों को इंगित करने की अनुमति है। तो, मुझे लगता है कि मुझे किसी भी तरह String
से Pointer
में बदलने की आवश्यकता है। मुझे जेएनए में NativeString कक्षा मिली, जो काम करेगा, सिवाय इसके कि यह पैकेज-प्राइवेट क्लास है।
जावा String
को मूल स्वरूप में बदलने के लिए अनुशंसित तरीका क्या है और इसे Pointer
प्राप्त करें? क्या मैं TRUSTEE
संरचना के लिए सही डेटा प्रकार का उपयोग भी कर रहा हूं? मैं जेएनए के लिए कुछ नया हूँ, तो कृपया मुझे क्षमा करें अगर मुझे कुछ स्पष्ट याद आ रही है।
अद्यतन
मैं अपने समस्या का समाधान मिल गया है, लेकिन मैं अभी भी यह सुनना चाहते हैं, तो किसी को भी एक बेहतर समाधान है।
धन्यवाद, ऐसा करने के लिए यह "सही" तरीका प्रतीत होता है। एक प्रश्न - आपने 2-तर्क के बजाय 1-तर्क नेटिव स्ट्रिंग कन्स्ट्रक्टर का उपयोग क्यों नहीं किया? – fragorl
@fragorl मेरे आवेदन के लिए मैं विस्तृत-वर्ण (यूनिकोड) स्ट्रिंग का उपयोग कर रहा था, इसलिए मुझे 'wide' पैरामीटर को 'true' पर सेट करने की आवश्यकता थी। 1-तर्क निर्माता इसे 'झूठी' पर सेट करता है। –
आह मेरे बुरे, मैं जेना के नवीनतम संस्करण को देख रहा था, जहां उन्होंने 1-Arg कन्स्ट्रक्टर बदल दिया। अब यह पढ़ता है: यह (स्ट्रिंग, मूल .getDefaultStringEncoding()); लेकिन आपके पास पुराने संस्करण के लिए स्रोत कोड है - बेशक, आपकी पोस्ट 2012 से है, woops>< – fragorl