سؤال

لدي مشروع صغير إلى متوسط ​​بلغة C++/CLI.أنا حقًا أكره امتدادات بناء الجملة لـ C++/CLI وأفضل العمل في C#.هل هناك أداة تقوم بعمل لائق لترجمة أحدهما إلى الآخر؟

يحرر: عندما قلت Managed c++ قبل أن أقصد على ما يبدو c++/CLI

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

المحلول

يمكنك فقط ترجمة كود C++ المُدار (وكود C++/CLI) إلى C# إذا كان كود C++ مُدارًا تمامًا.إذا لم يكن كذلك - أي.إذا كان هناك تعليمات برمجية أصلية مضمنة في المصادر - فلن تتمكن أدوات مثل .NET Reflector من ترجمة التعليمات البرمجية لك.

إذا كان لديك كود C++ أصلي مختلط، فإنني أوصي بمحاولة نقل الكود الأصلي إلى ملف DLL منفصل، واستبدال استدعاءات وظائف DLL بوظائف كعب روتين يمكن التعرف عليها بسهولة، وتجميع مشروعك كمكتبة .NET خالصة، ثم استخدم عاكس .NET لإلغاء التحويل البرمجي إلى كود C#.ثم يمكنك استبدال الاستدعاءات إلى وظائف كعب الروتين عن طريق استدعاءات p إلى مكتبة الارتباط الحيوي (DLL) الأصلية الخاصة بك.

حظ سعيد!انا اشعر بك!

نصائح أخرى

إن .NET Managed C++ يشبه حطام القطار.ولكن هل نظرت إلى C++ CLI؟أعتقد أن Microsoft قامت بعمل رائع في هذا المجال لجعل لغة C++ مواطنًا صافيًا من الدرجة الأولى.

http://msdn.microsoft.com/en-us/magazine/cc163852.aspx

لست متأكدًا مما إذا كان هذا سينجح، لكن حاول استخدام .صافي العاكس جنبا إلى جنب مع ReflectionEmitLanguage توصيل في.يطالب المكون الإضافي RelelectionEmitLanguage بتحويل التجميع الخاص بك إلى كود c#.

مرة أخرى ~ 2004، كان لدى Microsoft أداة يمكنها تحويل C++ المُدارة إلى C++/CLI ...نوعا ما.لقد قمنا بتشغيله على مشروعين، ولكن لنكون صادقين، فإن مقدار العمل المتبقي لتنظيف المشروع لم يكن أقل من حجم العمل الذي كان سيتطلبه إجراء التحويل يدويًا في المقام الأول.لا أعتقد أن الأداة قد تم طرحها على الإطلاق في إصدار عام (ربما لهذا السبب).

لا أعرف أي إصدار من Visual Studio تستخدمه، لكننا تمكنا من إدارة تعليمات برمجية C++ التي لن يتم تجميعها مع Visual Studio 2005/2008 باستخدام رمز التبديل /clr:oldSyntax وما زال لدينا بقايا VS 2003 لذلك.

لا أعرف أي طريقة للانتقال من C++ إلى C# بطريقة مفيدة ...يمكنك محاولة التعثر عليه من خلال العاكس :)

غالبًا ما يتم تنفيذ مثل هذه المشاريع بلغة c++/cli لأن لغة C# ليست حقًا خيارًا أنيقًا لهذه المهمة.على سبيل المثالإذا كان عليك التعامل مع بعض مكتبات C++ الأصلية، أو القيام بأشياء عالية الأداء جدًا في المستوى المنخفض C.لذا تأكد فقط من أن من اختار c++/cli ليس لديه سبب وجيه للقيام بذلك قبل إجراء التبديل.

بعد قولي هذا، أنا متشكك للغاية في وجود شيء يفعل ما تطلبه، لسبب بسيط وهو أنه ليس كل أكواد C++/cli قابلة للترجمة إلى C# (وربما العكس أيضًا).

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