से पहले ऑब्जेक्ट्स को नष्ट कर रहा है प्रतीत होता है मैं डेल्फी XE2 का उपयोग करके गुगलडॉक्स एपीआई के लिए डेल्फी रैपर पर काम कर रहा हूं। मैंने एक्सएमएल डेटा बाइंडिंग विज़ार्ड का उपयोग करके सभी कक्षाएं उत्पन्न कीं। कोड का उपयोग करके व्याख्या करना बहुत आसान है, इसलिए यहां मेरा टेस्ट कॉल फ़ंक्शन है।डेल्फी
function TGoogleDocsApi.GetEntries : IXMLEntryTypeList;
var
httpHelper : IHttpHelper;
xml, url : string;
xmlDoc : TXmlDocument;
ss : TStringStream;
feed : IXmlFeedType;
begin
ss := TStringStream.Create;
httpHelper := THttpHelper.Create;
if(fToken.IsExpired) then
fToken.Refresh(fClientId,fClientSecret);
url := BaseUrl + 'feeds/default/private/full?showfolders=true&access_token='+fToken.AccessToken+'&v=3';
xml := httpHelper.GetResponse(url);
ss.WriteString(xml);
ss.Position := 0;
xmlDoc := TXmlDocument.Create(nil);
xmlDoc.LoadFromStream(ss);
feed := GoogleData2.Getfeed(xmlDoc);
Result := feed.Entry;
end;
अब, मुद्दा यह है कि 'अंत' मारा जाता है पर, Result.ChildNodes स्मृति में एक पता है और यह गिनती 20 IXMLEntryTypeList IXMLNodeCollection का एक बच्चा इंटरफेस है है। अगर बयान, मैं "। मॉड्यूल में पता 0061A55C 'GoogleDocsApiTests.exe' पढ़ें पता 00,000,049 के कम से पहुँच उल्लंघन" और जब यह बताने वाला पहुँच उल्लंघन मिल
procedure TestIGoogleDocsApi.TestGetEntries;
var
ReturnValue: IXMLEntryTypeList;
begin
ReturnValue := FIGoogleDocsApi.GetEntries;
if(ReturnValue = nil) then
fail('Return value cannot be nil');
if(ReturnValue.ChildNodes.Count = 0) then
fail('ChildNodes count cannot be 0');
end;
दूसरे पर:
अब यहाँअपने परीक्षण है मैं रिटर्नवैल्यू और रिटर्नवैल्यू के लिए अपनी घड़ियों को देखता हूं। चिल्डनोड्स, मुझे लगता है कि रिटर्नवैल्यू के पास एक ही पता है क्योंकि परिणाम TGoogleDocsApi.GetEntries विधि में किया गया था, लेकिन यह मुझे रिटर्नवैल्यू के लिए घड़ी पर पहुंच उल्लंघन देता है। चिल्डनोड्स और TGoogleDocsApi.GetEntires में विधि, परिणाम .ChildNodes का एक वैध पता है और इसकी गुण भर चुके हैं।
मेरे लिए ऐसा लगता है कि डेल्फी लाइन के साथ कहीं भी चाइल्ड नोड्स संपत्ति जारी कर रहा है, लेकिन यह मुझे समझ में नहीं आता है क्योंकि रिटर्नवैल्यू को अभी भी इसका संदर्भ देना चाहिए (मुझे लगता है) इसे चारों ओर रखना चाहिए।
कोई विचार क्या हो रहा है?
आपका फ़ंक्शन 'ss' लीक करता है, लेकिन शायद आपने इस प्रश्न के लिए कोड को सरल बना दिया है। साथ ही, फ़ंक्शन लौटने पर 'फ़ीड' को जीवित रखने के लिए क्या होता है। क्या 'feed.Entry' का संदर्भ लिया गया है' फ़ीड 'जीवित रखें? जवाब इन पंक्तियों के साथ होगा, यानी @hvd क्या कहता है की नस में। आपको आवश्यक वस्तुएं जीवित रखना है। –