سؤال

وأود أن إنشاء مشروع C# وتنفيذ القائمة الأصلية (C++) رمز.لا أحد يعرف عن أي تعليمي جيد حيال ذلك ؟

وذلك بفضل!

هل كانت مفيدة؟

المحلول

ويمكنك استخدام P / استدعاء ويمكنك استدعاء الأساليب غير المدارة. أنا ما بعد لك بعض الأمثلة: هذا هو إشارة إلى الوثائق الرسمية MSDN. هذا عبارة مانتينيد مجتمع الموقع مع معظم المكتبات غير المدارة Windows الشائعة جنبا إلى جنب مع التوقيعات طريقة وأمثلة

نصائح أخرى

إذا تدار بك C ++ كود (كما تقول)، ثم كنت أقترح عليك أن ترك الأمر كما C ++ <م> إلا لديك سبب وجيه جدا ل- المجالس المستقبل C # (الخ) يجب أن تكون قادرة على مجرد مرجع له "كما هي".

افترض تنفيذ التعليمات البرمجية الموجودة هل تقصد أنك تريد أن نسميها من C#, مع الحد الأدنى من التغييرات رمز C++.

أنا من محبي الأخيرة المشتري من الكتاب C++/CLI في العمل التي لديها زوجان من المفيد فصول عينة على الانترنت.

هذا مقدمة على CodeProject هو نقطة انطلاق جيدة.

المؤلف من C++/CLI في العمل لديها عدد من المقالات حول CodeProject ، انتقل لأسفل إلى C++/CLI القسم على له مؤشر.

على مقالة ويكيبيديا على P/الاحتجاج له عدد من الأسباب لماذا قد لا ترغب في استخدام هذا النهج ، والذي أتفق معه:

  • فقدان الكتابة الدعم من قبل المترجم
  • ممكن نوع البيانات أو محاذاة القضايا لديك خريطة أنواع باليد
  • تحتاج إلى دبوس القمامة التي تم جمعها الكائنات

أفضل نقطة انطلاق MSDN هو ملخص المادة.

لماذا لا تحاول مغلفة المدارة لالتعليمات البرمجية C ++.

HTTP: //msdn.microsoft.com/library/default.asp؟url=/library/en-us/vcmxspec/html/vcmg_accessingcodefromframeworkobjects.asp

وربما كان أسهل طريقة للقيام بذلك هي لإنشاء مشروع ++ / CLI C، والتي سوف تمكنك من مزيج المدارة وغير المدارة C ++. يمكنك ثم لف الموجودة لديك غير المدارة C ++ الطبقات مع مجمع صافي المدارة التي لديك C # رمز يمكن استدعاء مباشرة. مجلة MSDN لديها المقالة على C ++ / CLI.

وإمكانية التشغيل المتداخل لن يكون إلا حقا مفيدة لاستدعاء وظائف على غرار C. لا يمكنك حقا استخدامه للتفاعل مع الطبقات نقية C ++.

وتعلمت هذا من خلال القيام بذلك، ولذا فإنني لم يكن لديك تعليمي جيد، ولكن هناك بضعة أشياء تحتاج إلى أن يكون على علم - تمكنت C ++ و C ++ / CLI على حد سواء تتكامل مع التعليمات البرمجية غير المدارة مع عدد قليل جدا من طبقات قبيحة. هذا ليس هو الحال مع C #. في إدارتها C ++، فمن الممكن جدا أن تفعل شيئا من هذا القبيل:

dotNetForm->Text = S"My Project"; // regular managed code
::SetWindowText(dotNetForm->Handle, "Your Project"); // mixed managed/unmanaged

وأما في C # عملتم لP / استدعاء إلى SetWindowText - وليس ان كنت حقا أن: انها مجرد مثال بسيط، ولكن عليك أن تدرك أن المجمع تمكن C ++ هو مزيج غريب من القيام بالكثير من إمكانية التشغيل المتداخل لك بشفافية وعدم القيام بأي شيء بالنسبة لك في الوقت نفسه (أي انها لن تفعل أي marashalling ضمنيا).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top