मैं जेएनए से सी में इस विधि हस्ताक्षर के साथ एक विधि कैसे कॉल कर सकता हूं?जावा में नया पॉइंटर कैसे प्राप्त करें?
int open_device(context *ctx, device **dev, int index);
सी विधि के अंतिम दो पंक्तियों इस तरह दिखेगा:
*dev = pdev;
return 0;
कि विधि में dev
का ही फायदा नहीं है यही कारण है कि। इसका मतलब है कि मुझे विधि में एक खाली सूचक को एक पॉइंटर पास करना होगा, है ना? विधि तब device
ऑब्जेक्ट के पते के साथ खाली सूचक को भरती है और मैं डिवाइस को अन्य तरीकों से पॉइंटर पास कर सकता हूं।
मेरा सवाल है: क्या ऐसा करने का यह सही तरीका है? यदि ऐसा है, तो मैं जावा से एक नया सूचक कैसे आवंटित करूं?
स्वीकार किए जाते हैं जवाब के आधार पर मैंने ऐसा किया:
Memory p = new Memory(Pointer.SIZE);
Memory p2 = new Memory(Pointer.SIZE);
p.setPointer(0, p2);
nativeLib.open_device(ctx, p, index);
return p2;
बस उत्सुक: क्या आपके अपडेट किए गए कोड आपके लिए काम करते हैं? ऐसा लगता है कि आप '* p = p2' सेट कर रहे हैं लेकिन फिर सी फ़ंक्शन' * p = pdev' करेगा जिससे इस प्रकार मूल्य को ओवरराइट किया जा सके। – casablanca
@ कैसाब्लांका: हाँ, मैंने इसका परीक्षण किया, यह काम करता है। – thejh
@thejh क्या आप जानते हैं कि अमान्य स्मृति पते को इंगित करने के कारण अवैध MemoryAccess अपवाद को कैसे प्रबंधित किया जाए? – mayooran