2010-09-22 19 views
5

के साथ अजीब स्ट्रिंग व्यवहार मेरे पास डेल्फी 2007 प्रोग्राम है, जो डेल्फी 2010 डीएलएल कहता है। कार्यक्रम बड़ा है और अभी तक 2010 तक पोर्ट नहीं किया गया है, इसलिए कोई रास्ता नहीं है कि मैं इसे अभी बदल सकता हूं।डीएल कॉल

मैं स्ट्रिंग पास करने के लिए SimpleShareMem इकाई का उपयोग करता हूं लेकिन borlndmm.dll के साथ ShareMem को भी आजमाया।

एक फ़ंक्शन के लिए अब मैं डेल्फी 2007 प्रोग्राम से डीएल (इसलिए AnsiString) तक एक स्ट्रिंग पास करता हूं। डीएलएल डीबग करते समय, यह AnsiString सामान्य दिखता है और घड़ी सूची में देखा जा सकता है। लेकिन चर AnAnsistring मूल्य '???????'#0#0#0'???A' हो जाता है अगर मैं की तरह

AnAnsiString := PassedAnsiString; 

एक सरल लगता है, लेकिन अभी भी PassedAnsiString ध्यानसूची में पठनीय है। इसके अलावा

AnAnsiString := PassedAnsiString + NotPassedAnsiString; 

'???????'#0#0#0'???A' का उपयोग मूल्य के रूप में करता है।

समस्या कहां है? क्या यह 2007 < -> 2010 मुद्दा है? इसे कैसे जोड़ेंगे? सहायता के लिए धन्यवाद।

उत्तर

5

शायद यह इसलिए है क्योंकि डी 2009 में जवाब देने के लिए एक एन्कोडिंग फ़ील्ड जोड़ा गया था। IOW रिकॉर्डिंग पॉइंटर के नकारात्मक ऑफसेट पर रिकॉर्ड (TAnsiRec) अलग है और यूनिकोड और गैर यूनिकोड डेल्फी के बीच स्थानांतरित हो गया है (Ansicring यूनिकोड संस्करणों में भी बदल गया है!)

मुझे नहीं लगता कि ड्रॉप करने के अलावा इसके लिए एक सभ्य समाधान है पी से पी (ansi) चार स्तर

+7

दरअसल; डीएलएल सीमाएं केवल उन प्रकार के लिए सुरक्षित हैं जो डेल्फी विशिष्ट नहीं हैं। डीएलएल सीमाओं में डेल्फी विशिष्ट प्रकारों को साझा करना केवल तभी काम करता है जब इन प्रकारों के अंतर्निहित बाइनरी प्रतिनिधित्व सीमा के दोनों तरफ समान होते हैं। डेल्फी 200 9 से शुरू, AnsiString का बाइनरी प्रतिनिधित्व बदल गया, इसलिए यह पिछले डेल्फी संस्करणों के साथ बाइनरी संगत नहीं है। –

+0

और यदि मेमोरी मैनेजर एक जैसा है। –

संबंधित मुद्दे