Jak przenieść enum class z C++ do C#?

0

Chcę przenieść enum class Moje_enum {ja,ty,on} zdefiniowane w pliku .hpp do programu C#. enum jest elementem oprogramowania C++, które poprzez CLI ma być zaimplementowane. Mam problem z enum.

Nie mam pojęcia jak to zrobić. Pomocy!

plik enum_CPP.h

namespace ENUM_namespace
{
	enum class   Moje_enum
	{
		ja,ty,on
	};
    //Inne deklaracje
}

Jak opisać Moje_num w pliku typu CLR/CLI .hpp, aby enum po skompilowaniu było widoczne w przyklad.cs?

plik przyklad.cs

using System;
using CLR_namespace //zdefiniowane w pliku typu CLR 
namespace Cs_enum
{
    class Program
    {
        static  void Main()
        {
        // Jak użyć enum class Moje_enum?
    }
  } 
}

Bardzo proszę o pomoc.

2

@mm53:

A widziałeś C# choćby przez ramie u kolegi?

Jeśli ktoś ci da gotowca, to i tak nic nie pomoże na braki podstaw

0
Dregorio napisał(a):

@mm53 https://learn.microsoft.com/en-gb/dotnet/csharp/language-reference/builtin-types/enum

Chodzi mi CLI C++, a w nim deklaracja enum class zdefiniowane w C++.

0

Spróbuj public enum class.

0

Dziękuję za próby pomocy. Myślałem, że uda się za darmo bez wysiłku rozwiązania problemu. Rozwiązałem go sam i okazało się, że jest to proste. Problem rozwiązuje rzutowanie static_cast umieszczone w bibliotece CLR/CLI. Poniżej pokazuję jak ja to zrobiłem.
Z plików Enum_Test.h, Enum_Test.cpp, CLR_Enum_Test.h i CLR_Enum_Test.cpp utworzyłem bibliotekę DLL z obsługą środowiska uruchomieniowego CLR (/clr)

Plik Enum_Test.h

#pragma once
#pragma warning (disable : 4430)
#include <sstream>
using namespace std;
namespace Test
{
	public enum class  Wyliczenia
	{
		Ja,Ty,On
	};
	 static class FUNKCJE
	{
	public:
		FUNKCJE()
		{
		};
		~FUNKCJE()
		{

		};
		static const string GetEnum(const Wyliczenia wylicz);
	}p;
}

Plik Enum_Test.cpp

#pragma once
#include "Enum_Test.h"
namespace Test
{
	const string Test::FUNKCJE::GetEnum(const Wyliczenia wylicz)
	{
		switch (wylicz)
		{
		case Wyliczenia::Ja:
		{
			return "Wybrano Ja";
			break;
		}
		case Wyliczenia::Ty:
		{
			return "Wybrano Ty";
			break;
		}
		case Wyliczenia::On:
		{
			return "Wybrano On";
			break;
		}
		default:
			return "Nic nie wybrano";
			break;
		}
	}

}

Plik CLR_Test.h

#pragma once
#include "Enum_Test.h"

using namespace std;
using namespace   System;
using namespace System::Reflection;
using namespace Test;

namespace CLR_Test
{
	public enum  class  Wyliczenia
	{	
			Ja,Ty,On
	};
	public ref  class FUNKCJE
	{
	protected:
		Test::FUNKCJE* Przeliczanie = nullptr;
	public:
		FUNKCJE()
		{
			Przeliczanie = new Test::FUNKCJE();
		}
		!FUNKCJE()
		{
			delete Przeliczanie;
			Przeliczanie = nullptr;
		}
		~FUNKCJE()
		{
		}
		 const String^ GetEnum(const Wyliczenia wylicz)
				{
			 Test::Wyliczenia a = static_cast <Test::Wyliczenia>(wylicz);

					return gcnew String(Przeliczanie->GetEnum(a).c_str());
				}

	};
}

Plik CLR_Test.cpp

#pragma once
#include "CLR_Enum_Test.h"
using namespace   System;
using namespace std;

namespace CLR_Test
{
}

Teraz tylko napisać kod C# z odwołaniem do utworzonej biblioteki i gotowe

Plik Enum_Test.cs

using CLR_Test;
namespace CS_Enum_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Wyliczenia w = Wyliczenia.Ja;
            FUNKCJE fun = new FUNKCJE();
            Wyliczenia wyl = Wyliczenia.Ja;
            string ja = fun.GetEnum(wyl);
            wyl = Wyliczenia.Ty;
            string Ty = fun.GetEnum(wyl);
            wyl = Wyliczenia.On;
            string On = fun.GetEnum(wyl);
            int a = 0;
        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1