ios - आईओएस में डेल्फी XE6 लिंक सी कोड



c delphi (1)

कोड उचित दिखता है और आपकी कॉलिंग सम्मेलन हैंडलिंग मेरी आंखों पर पूरी तरह से सही है।

मुझे लगता है कि आप ऐप्पल के एआरएम क्लैंग में एक संभावित / अफवाह बग में भाग ले सकते हैं, जहां स्थिर कार्य से एक स्थिर कार्य (दृश्यों के पीछे हो सकता है जैसे कि प्रकार रूपांतरण के लिए हो सकता है) को भ्रष्टाचार का कारण बन सकता है। आप इतना सीधे नहीं कर रहे हैं, लेकिन बाहरी कार्यों को एक स्टब के माध्यम से कार्यान्वित किया जा सकता है जो कार्यान्वयन वाले अज्ञात स्थिर कार्य को कॉल करता है।

आप अपने बाहरी फ़ंक्शन को एक रैपर होने का प्रयास कर सकते हैं जो केवल इसके बजाय एक गैर स्थैतिक कार्यान्वयन फ़ंक्शन को कॉल करता है।

मैंने डेल्फी XE6 का उपयोग करके एंड्रॉइड पर एक ऐप बनाया है जिसके लिए सी कोड की आवश्यकता है। हालांकि आईओएस पर मैं इसे काम नहीं कर सकता। मुझे संदेह है कि समस्या हाथ / अंगूठे की स्थिति से संबंधित है, लेकिन मुझे यकीन नहीं है। पास्कल से सी कोड को कॉल करने के लिए सिस्टम में कोई समस्या नहीं है। लेकिन अगर सी कोड एक पास्कल प्रक्रिया वापस कॉल करता है आईओएस एक "bad system call (12)" उत्पन्न करता है

पास्कल कोड यहां है:

function testarm(a,b:integer):integer; cdecl; external "testC.o";

Procedure testC;
Begin
  testarm(1,2);
end;

function BackToPascal(a,b:integer): integer; cdecl;
  Begin
  result := a+b;
end;

......

exports
  BackToPascal;

और यहां सी कोड है:

extern int BackToPascal(int a,int b);

extern int testarm(int a,int b)
{
   int i;
   i = BackToPascal(a,b);
   return i+1;
}

एंड्रॉइड पर मैं संकलन कर रहा हूं (यह काम कर रहा है):

..."arm-linux-androideabi-gcc.exe" -c test.c -o test.o -O3 -mfloat-abi=softfp -mfpu=neon -marm -march=armv7-a -mtune=cortex-a8

आईओएस पर:

xcrun -sdk iphoneos clang -c -arch armv7 test.c -O3 -mfpu=neon -mtune=cortex-a8 -marm -march=armv7-a -mfloat-abi=softfp

मुझे संदेह है कि मेरी एक्सकोड सेटिंग्स गलत हैं लेकिन मैं समझ नहीं पा रहा हूं कि क्यों।

जब मैं डीबग करता हूं, तो त्रुटि तब होती है जब testC को testarm करते समय testC में testarm को कॉल BackToPascal ("bl 0x8b8390 Xgobj.BackToPascal (int, int)" पर)। एंड्रॉइड पर यह सही काम करता है हालांकि BackToPascal सीधे BackToPascal नहीं कॉल करता है, लेकिन निम्न कोड:

75A82D94 12C68FE2         add r12, pc, #18874368 ; 0x1200000
75A82D98 73CA8CE2         add r12, r12, #471040 ; 0x73000
75A82D9C 40F2BCE5         ldr pc, [r12, #576]! ; 0x240

जो BackToPascal में BackToPascal





delphi-xe6