أهلاً بكم من جديد يا أصدقائي.
هذا هو الفصل الأخير من رحلتنا الحرة هنا.
هذه هي القطعة المفقودة في لغز وظائف التعلق والاضمحلال.
وهذا أيضاً رائع للغاية.
سنرى لاحقاً كيف يمكننا حل التحديات أو المهام المعقدة في دقائق معدودة.
ولكن قبل أن نتمكن من القيام بذلك، علينا للأسف أن نقوم بالقليل من التنظير.
لذلك، دعونا نلقي نظرة على ما قمنا به حتى الآن وما هو الفرق من الآن فصاعداً.
نحن هنا نمتلك هاتفنا الذكي والتطبيق الذي رأيناه حتى الآن معظمه أو أعتقد أنه مكتوب
كله بلغة جافا، لا يوجد تطبيق بينغ مساحة فارغة كبيرة.
أعتقد أن هذه تحتوي على بعض الشيفرات البرمجية الأصلية، لكن كل الشيفرات الأخرى، أعتقد أنها كُتبت بلغة جافا.
إذاً لدينا عالم جافا الخاص بنا، وفي عالم جافا الخاص بنا يمكننا الآن التنقل بسهولة حول هذا.
يمكننا ربط فئات الطرق والمثيلات وكل ما نريد، وكلها تتم بواسطة جافا عميقة بين الآلة.
لذا فقد رأينا هاتين الطريقتين في جافا.
لا تستخدم الحصول على مراجع تلك الفئات وتنفيذ بعض الإجراءات الرائعة حقًا على هذه الفئة وجاوة
لاختيار مسح الذاكرة بحثًا عن المثيلات والعمل مباشرةً معها.
لذا فإن التلاعب بالألعاب مثل تطبيق بينغ هذا لأداء أو إنشاء مدرب خاص.
كان هذا ممتعاً للغاية.
للأسف، انتهى هذا الأمر الآن.
ليس الجزء الممتع، ولكن استخدام نقطة جافا و جافا حصلت على نقل.
لذا إذا كنت تتعامل مع شيفرة C ++C، فعلينا أن نحفظ مخطط الأخطاء حتى نتمكن من تجاهل الآن استخدام نقطة جافا
ونقطة جافا اختيار ونقطة جافا اختيار ونقطة معترضة مرفقة مرحبًا بها.
وهذه هي الطريقة التي يمكننا بها ربط الوظيفة الأصلية بالحرية.
ونعم، للأسف لديك الحق مع دوم الحرة.
التلاعب والدالة أمر سهل، ولكن الوصول إلى حقول المثيل أو الأصناف مستحيل جدًا دون الحصول
على العنوان.
ولكن هذا هو كل ما نحتاجه في معظم الأحيان.
أعني، إذا تمكنا من التعامل مع تلك المعلمات أو قيم الإرجاع وتشغيلها، يمكننا أن نؤدي
على ما أعتقد 90% من مهمتنا الآن.
وفيما يتعلق برمز C ++C الخاص بنا، فهذا يكفي.
سترى ذلك لاحقاً.
كم القدرة التي لا تزال لدينا فقط من خلال ربط الوظائف.
حسناً
حسناً.
تتطابق بنية اعتراض المرفق إلى حد كبير مع نقطة السفر، ولكنها مختلفة أيضًا بالطبع.
إذًا المتغير الأول هنا، هذا هو مؤشر الدالة الأصلية.
يمكننا الحصول على ذلك بسهولة في الحرية.
لذلك ليس من الصعب أيضًا ربط هذا الأمر وسنرى لاحقًا كيف يمكننا القيام بذلك.
في الوقت الحالي، سنبقي هذا الأمر على مستوى عالٍ فقط.
إذن هنا نقوم بإدخال مؤشر الدالة الخاصة بنا.
نريد ربط المعلمة الثانية.
هذه هي الآن عمليات الاستدعاء الخاصة بنا وهذه المرة لدينا في الدخول والخروج.
عند الدخول يعني الآن إذا كنا ندخل إلى دالة وهذا يعني أننا لا نملك سوى الوصول إلى المعلمات
في رد النداء عند الدخول، يتم استدعاء رد النداء الوحيد قبل أن نغادر هذه الدالة مباشرةً حتى نتمكن من
تطبيق بعض التصحيحات المتعلقة بقيمة الإرجاع قبل أن نغادر هذه الدالة مباشرةً.
حسناً.
عند الدخول سهولة الوصول إلى المعلمات عند الإجازة، سهولة الوصول إلى قيمة الإرجاع.
حسنًا، لنلقِ نظرة الآن على مثال.
إذن كيف يتم تضمين كود C ++C في كود Java الخاص بنا؟
وبالتالي، فقد أعددت الطلب التالي.
هذا هنا من النظرة الأولى، يبدو للوهلة الأولى أنه مجرد كود جافا خالص تمامًا وربما نعم، أعتقد أنه
كود جافا خالص أيضًا.
دعنا نلقي نظرة.
إذاً أول شيء هنا، لدينا هذا النشاط الرئيسي، حسناً؟
ثم لدينا متغيران
وهنا لدينا الآن شيء جديد.
لقد حصلنا على إعلان ثابت وهذا هنا في مكتبة تحميل نظام الدالة.
وهنا لدينا الآن المكتبة التي يتم تحميلها.
وهذا هو الملف، ملف الكائن المشترك في دليل حياتنا لهذا التطبيق.
وهذا يعني أن نقطة الشفة الأصلية هذه هي نقطة الشفة الأصلية حيث يتم الآن تحميل كل شيء في سياق هذا النشاط الرئيسي
هنا.
وهذا يعني أن التعليمات البرمجية لـ C++C أصبحت متاحة الآن هنا، ولكن علينا بناء نوع من الجسور
أولاً.
لذا علينا أن نبني جسرًا من عالم الجافا إلى كلمة C++C.
ويتم الإعلان عن هذا في السطر 25 في كود جافا هنا.
لذا، إذا انتقلنا إلى هذا هنا، يمكننا أن نرى أن لدينا دالة عادية في المنظر الأول.
إذن هذا هو نوع الإرجاع.
إنها تعود في سلسلة ولدينا هذه الدالة في سلسلة نصية.
يأخذ هذا التمرير الخاص بنا وقيمة صحيحة تحمل اسم
حسنًا، بجانب هذا، لدينا الآن هذا المواطن الأصلي أمام هذا.
وهذا هو المعرف الجديد أن هذه الدالة هنا هي دالة أصلية.
إذًا هذه الدالة، تشفير السلسلة يتم تعريفها الآن في مكتبتنا هنا في هذه الحلقة الأصلية.
وبالتالي فإن تحديد الوظائف الأصلية سهل للغاية في أندرويد.
كل ما علينا فعله هو أن نبحث عن هذا هنا، هذا الإعلان الأصلي أمام
دالتنا.
ثم نعلم إذا كنت تبحث عن رمز هذه الدالة الآن، فعلينا أن نلقي نظرة على المكتبة.
حسناً
حسناً.
أخيرًا وليس آخرًا، يمكننا استدعاء هذه الدالة الآن هنا.
لذلك نحن هنا نسمي هذا
وبالنظر إلى هذه الدالة، لا يمكننا معرفة ما إذا كانت هذه الدالة موجودة الآن في جافا أو دالة قديمة.
لكننا أيضًا لا نهتم بهذا الأمر في الوقت الحالي.
الأجزاء الرئيسية المهمة هي
دعونا نلخص ذلك سريعاً.
إذاً يبدو نشاطنا الرئيسي في العرض الأول مثل كود جافا، هذا النشاط هنا.
ولكن في العرض الثاني، قمنا أيضًا بتحديد هذه السلسلة الأصلية العامة ودالة التشفير
وهذه الدالة هي كود C++.
لجعل هذه الدالة متاحة في شيفرتنا، نحتاج أولًا إلى تحميل هذه المكتبة حيث يتم تعريف
هذه الدالة وهذه الدالة هنا، وهي المكتبة الأصلية.
لذا نحتاج بعد ذلك إلى إجراء إعلان من عالم الجافا إلى كلمة C++C وهذا يتم هنا.
إذًا نحن هنا نصنع النموذج الأولي لهذه الدالة، هذا الإعلان، وبإلحاق هذه الدالة الأصلية،
نعلم الآن، حسنًا، ويتم تعريف هذه الدالة في هذه المكتبة الأصلية، ولكن هذا هو النموذج الأولي لهذه
لذا نحتاج إلى توفير معلمتين ونتوقع إرجاع سلسلة بعد تنفيذ هاتين الخطوتين.
يمكننا الآن استدعاء هذه الدالة في التعليمات البرمجية الخاصة بنا ويتم ذلك هنا في السطر 18.
لذا يمكننا ببساطة الوصول إلى هذه الدالة باستخدام اسم الدالة والمعلمات التي نحتاج إلى توفيرها
هنا.
إذن هذه هي في النهاية كل هذه هي الخطوات التي نحتاج إلى القيام بها لاستدعاء دالة إنديك الآن.
حسناً، لم يتبق لديّ الآن سوى سؤال واحد فقط.
كيف تبدو هذه الدالة أو كيف تبدو هذه الدالة في هذه الكلمة C++، دالة السلسلة المشفرة هذه؟
وبالتالي، فقد أرفقتُ أيضًا الكود المصدري لهذا الكود هنا.
لذا دعونا نتعمق في هذا الأمر.
حسناً.
لذا ها هو لدينا هنا هذه المرة بين أسماء مختلفة.
لذلك قمت هنا بتسمية سلسلة فك التشفير، ولكن الوظيفة متطابقة تمامًا.
لقد تلاعبت للتو بهذه الأسماء هنا.
حسنًا، في الأعلى لدينا كود جافا وفي الأسفل لدينا الآن كود C++C.
وهكذا حصلنا على التضمينات الخاصة بنا ثم حصلنا على هذا، اسم الدالة
الغريب حقًا هنا، هذا، هذا هو الآن اسم الفئة الكامل.
لذا يمكننا أن نرى أن لدينا هذه الجافا أمام هذا.
ولكن بعد ذلك لدينا التطبيق، القرصنة والاضمحلال.
فريدا، هذا هو اسم العبوة.
ثم لدينا النشاط الرئيسي، وهو اسم الفصل.
وبعد هذا، يوجد الآن اسم الطريقة أخيرًا لهذه الدالة هنا.
لذا نحن الآن نستخدم الآن طريقة فك تشفير السلسلة في فئة النشاط الرئيسية، والتي
نراها هنا في هذه.
وبالتالي يمكن أن يكون لدينا دوال متعددة تحمل نفس الاسم ولن نتداخل
معها في تطبيقنا لأننا نوفر بالفعل أو نوفر دائمًا اسم الحزمة الضخمة هذه، بما في ذلك اسم
الفئة أمام هذا.
حسناً.
هذا ليس شيئاً مثيراً للاهتمام.
هذا مجرد شيء نحتاج إلى معرفته في المرة القادمة.
هذه الدالة مثيرة للاهتمام حقًا لأننا هنا يمكننا أن نرى الآن معلمات هذه الدالة.
ولن ندرك ذلك حتى إذا لم نكن ندرك ذلك إذا لم نلقي نظرة فاحصة على هذا الأمر.
لذا يمكننا أن نرى هنا أن سلسلة فك التشفير في هذه السلسلة تحتوي على معلمتين، كلمة المرور وكذلك
الجولة.
وهنا يمكننا أن نرى الآن أن لدينا أربعة بارامترات.
نحن نمتلك سلسلة I بيئة، لدينا كائن، ثم حصلنا على سلسلة، وهي كلمة مرور الاسم.
أعني أنها لا تحتاج إلى أن تتطابق هنا مع هذين المعلمين، لأن هذا هو كود C++C، وهذه
هي كلمة جافا، ولكن الأنواع هنا يجب أن تتطابق.
حسنًا، أخيرًا وليس آخرًا، لدينا هذه الجولة أو معلمة التناوب.
كما ذكرنا سابقاً، لا يهم الاسم، فقط اكتب الآن.
لذا فإن السؤال، ما هذان الاثنان أمامهم؟
هذه السلسلة I البيئة وكائن k.
علينا أيضًا أن نضع هذا الأمر في الاعتبار لأنه مهم جدًا.
على سبيل المثال، إذا كنت تريد الوصول إلى هذه المعلمة هنا، كنا سنفترض أن هذه المعلمة
هي الفأس صفر لأننا لا نملك سوى معلمة واحدة هنا، ولكننا نملك هاتين المعاملتين في المقدمة.
وهذا وهذا، مما يعني أن هذا لا يصبح صفر فأس.
وهذا الذي هنا هو الفأس 2 وهذا الذي هنا هو الفأس 3.
حسناً.
هذا شيء يجب أن نضعه في اعتبارنا بالتأكيد.
والآن لنتحدث عن ماهية هذين الاثنين الآن؟
أول واحد لتغيير البيئة E.
هذا أمر مهم للغاية.
هذا هو المؤشر المتعلق بكل تلك الدوال، كل تلك الدوال المتسلسلة E.
ويمكن أن يكون هذا مفيدًا للغاية أيضًا أثناء البرمجة لأنه يمكننا الآن الوصول إلى هذه الدوال لإجراء
بعض أنواع الصب.
سننظر في هذا الأمر بعد قليل في المتغير الثاني k الكائن هنا.
هذا هو المؤشر المتعلق بالكائن الحالي.
يمكن تجاهل ذلك تماماً بالنسبة لنا.
في الوقت الحالي، هذا ليس له علاقة بالموضوع.
حسناً.
لذلك لدينا مؤشر يتعلق بجميع دوال الفهرس.
لقد حصلنا على مؤشر للكائن الحالي لدينا، ثم حصلنا على المعلمتين.
حسناً.
أخيرًا وليس آخرًا، لدينا في قيمة الإرجاع هذه هنا وهنا يمكننا أن نرى
أننا نستخدم بالفعل مؤشر الدالة هذا، مؤشر البيئة هذا هنا لأن السلسلة في
عالم C++ ليست مثل وجود سلسلة في عالم جافا.
أعني، نحن نتحدث هنا عن لغتي برمجة مختلفتين تمامًا، وبالتالي من المفهوم
تمامًا أنهما غير متوافقتين مع بعضهما البعض في الوقت الحالي.
ولذلك، لدينا الكثير من الدوال الفائقة التي تجعلنا ننتقل من C+++C إلى جافا وأيضاً
إلى الوراء بطريقة أسهل.
وأحدها داخل مؤشر وظيفة البيئة داخل مؤشر وظيفة البيئة هنا.
يُطلق على ذلك اسم سلسلة UTF الجديدة.
إذن نحن هنا نقدم الآن سلسلة C ++ C، هذه السلسلة المشفرة PV.
ثم نستدعي هذه الطريقة سلسلة C، والتي تنشئ سلسلة C من هذه السلسلة.
ومن ثم لدينا هذه السلسلة الجديدة UTF التي تجعل من هذه السلسلة سلسلة متوافقة في عالم جافا الخاص بنا.
حسناً.
ربما لا، لأن هذا كثير جداً في الوقت الحالي.
لذا دعونا نحاول تلخيص ذلك قليلاً.
إذاً لدينا تعريف دالتنا هنا، هذه السلسلة الأصلية العامة لفك تشفير السلسلة.
هذه الوظيفة الأصلية.
لذلك، يكون تعريف هذه الدالة ضمن شيفرة C++ في ملف الكائن المشترك هذا.
يمكننا رؤية هذا هنا.
لسوء الحظ، ليس لدينا شفرة المصدر.
إذا كنا نقوم بهندسة عكسية لتطبيقاتنا الآن.
لسوء الحظ، ليس لدينا شفرة المصدر هنا.
لا يتوفر هذا في تطبيقاتنا التي نقوم بهندستها العكسية.
لا يمكننا أيضًا بناء هذا بطريقة مشابهة لما رأيناه في عالم الجافا.
إذن هذه هنا، ستكون هذه أبسط وبالتالي ستكون قراءتها أبسط وبالتالي أصعب بكثير.
ولكن هذا ليس مطلوباً أيضاً.
يمكننا أن نرى هنا، على سبيل المثال، أننا نقدم سلسلة وكلمة مرور وبعض القيم الصحيحة فيما يتعلق
بجولتين ويمكننا أن نرى أنه يتم إرجاع شيء ما في المقابل.
إذا كنت تقوم بتوصيل هذا الشيء، فيمكنك مراقبته والتلاعب به.
وهنا يمكننا أن نرى ما هي كلمة المرور التي تدخل في النص المشفر، أشياء من هذا القبيل.
حسناً
حسناً.
ثم رأينا سلسلة فك التشفير هذه تحتوي على بادئة ضخمة.
هذه شرطة سفلية جافا ثم اسم الفئة بالكامل.
ثم لدينا هذه الدالة ن هذه هنا.
هذا مهم أيضًا لأننا إذا كنا نبحث في دوالنا لاحقًا، سيكون لدينا دائمًا هذه
البادئات الضخمة أمامها.
لذا إذا كنت تبحث عن سلسلة فك التشفير، علينا البحث عن اسم الدالة في نهاية هذه السلسلة.
سنعود في وقت لاحق.
حسناً.
أخيرًا وليس آخرًا، يمكننا أن نرى أنه ليس من السهل العودة إلى الوراء والتوتر ببساطة.
لذا، لا يمكننا استخدام السلسلة في كلمة C++C وإعادتها ببساطة.
علينا أن نطابقها.
ونعم، يتم ذلك هنا مع مؤشر دالة البيئة وهذا هو تكييف هذا أيضًا في سلسلة
يمكن فهمها في عالم جافا الخاص بنا.
هذا هو سبب وجود هذا التعريف هنا في عالم الجافا الخاص بنا لنعرف ما نتوقعه
وما نقدمه لهذه الدالة والوسائط وقيمة الإرجاع أيضًا.
حسناً.
هذا كل شيء الآن لهذا الفيديو هنا.
أنا آسف لأنه كان في الجزء النظري فقط، ولكن في الجزء التالي، سنقوم بالفعل بربط هذه الطريقة
وتعديلها.
لأنك إذا كنت تريد التعامل مع الوظائف الأصلية، فهناك طريقة سهلة وطريقة صعبة للغاية.
الطريقة السهلة هي شيء نعرفه بالفعل الآن.
قد لا تتعرف عليه، لكنك سترى لاحقاً.
من السهل جداً ربط أشياء كهذه.
سيتم تضمين الطريقة الصعبة أيضًا في هذه الدورة التدريبية لأنني رأيت الكثير من الأسئلة حول
كيفية ربط هذه المعلمات وقيم الإرجاع.
ونادراً ما رأيت إجابات صحيحة لهذا السؤال.
حسناً.
بعد معرفة ذلك بالطريقة السهلة والصعبة، سنلقي نظرة على الطريقة المذهلة.
هذه هي الطريقة الأخيرة.
وهذا الأمر رائع للغاية.
هذه هي الطريقة التي يمكننا من خلالها ربط الدوال، على سبيل المثال، مثل مقارنة السلسلة، ونسخ السلسلة، ونسخ الميم وغيرها.
لا أعرف المزيد من الوظائف في الوقت الحالي، ولكن أعتقد أن هناك المزيد.
وهذا رائع حقاً.
هذا رائع حقاً.
يمكننا القيام بمهام معقدة في دقائق معدودة فقط، وعلى سبيل المثال، نحن نتعامل
مع تحدٍ يتمثل في مقارنة كلمة المرور في هذا التطبيق ضمن دالة C++، على سبيل المثال، هنا.
وسنجد طريقة حول كيفية ربط هذا الجزء مباشرة داخل الوظيفة.
إذًا ليس فقط المعلمات وقيم الإرجاع، سنرى كيف يمكننا ربط هذا الجزء في الدالة واستخراج
كلمة المرور الصحيحة من هذا.
إذن هذه هي الطريقة المذهلة وهذا هو الجزء الأخير في رحلتنا هنا.
بعد ذلك، ستصبح بعد ذلك خبيرًا حرًا تمامًا حتى تتمكن من ربط الأشياء والتلاعب بها بشكل لا
يمكنك تخيله الآن.
حسناً
حسناً.
لذلك، أتطلع حقًا إلى رؤيتك في الفيديو التالي.