Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/180: Рейтинг темы: голосов - 180, средняя оценка - 4.75
26 / 2 / 0
Регистрация: 26.12.2011
Сообщений: 122
1

Аналог union в C#

25.06.2016, 16:58. Показов 32720. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Нужно взаимодействовать с C-библиотекой. При вызове функции из этой библиотеке ей нужно передать union структуру. Выглядит эта структура примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
union name
{
    struct struct1
    {
     
    }
 
    struct struct2
    {
 
    }
}
А как это реализовать на C# не знаю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2016, 16:58
Ответы с готовыми решениями:

Существует ли аналог union из С++ в С#?
собственно вот и вопрос. А то стала задача сделать из двух byte один short. Пришлось парсить через...

C++ Union в C#
Здравствуйте! Пишу программу на C# и столкнулся с проблемой, что dll написанная на с++ и...

C++ union на C#
Каким образом это можно сделать в C#. Необязательно,чтобы это была структура,просто может как-то...

Подобие union в с#
Привет всем! Столкнулся с проблемой, в с# нет объединения в структур. Кто как выходит из этой...

6
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.06.2016, 17:20 2
Лучший ответ Сообщение было отмечено Psilon как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    class Program
    {
        static void Main(string[] args)
        {
            var hack = new Union();
            hack.Float = 1;
            Console.WriteLine("Int = {0}, Float = {1}", hack.Int, hack.Float);
            hack.Int *= 2;
            Console.WriteLine("Int = {0}, Float = {1}", hack.Int, hack.Float);
        }
    }
 
    [StructLayout(LayoutKind.Explicit)]
    public struct Union
    {
        [FieldOffset(0)] public int Int;
        [FieldOffset(0)] public float Float;
    }
0
26 / 2 / 0
Регистрация: 26.12.2011
Сообщений: 122
25.06.2016, 17:28  [ТС] 3
Psilon, не совсем Вас понял. В union еще несколько структур. То есть можно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[StructLayout(LayoutKind.Explicit)]
    public struct Union
    {
        [FieldOffset(0)]
        public struct struct1
        {
 
         }
        [FieldOffset(0)] 
        public struct struct2
        {
 
         }
    }
0
Эксперт .NET
12078 / 8387 / 1281
Регистрация: 21.01.2016
Сообщений: 31,601
25.06.2016, 17:31 4
Mr.Evgen, возможно, что лучше будет получить от сишного кода указатель (IntPtr) и потом отобразить его на нужную тебе структуру (Marshal.PtrToStructure).
0
26 / 2 / 0
Регистрация: 26.12.2011
Сообщений: 122
25.06.2016, 18:04  [ТС] 5
Usaga, я так и хотел. Но пока не понимаю как это сделать. Я честно говоря с неуправляемым кодом первый раз работаю.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.06.2016, 18:08 6
Лучший ответ Сообщение было отмечено Psilon как решение

Решение

Mr.Evgen,
C#
1
2
3
4
5
6
7
8
[StructLayout(LayoutKind.Explicit)]
    public struct Union
    {
        [FieldOffset(0)]
        public MyStruct1 struct1;
        [FieldOffset(0)]
        public MyStruct2 struct2;
    }
0
26 / 2 / 0
Регистрация: 26.12.2011
Сообщений: 122
25.06.2016, 18:12  [ТС] 7
Psilon, теперь понял, спасибо.
0
25.06.2016, 18:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2016, 18:12
Помогаю со студенческими работами здесь

Аналог Union из С++
Господа программисты, купил себе табло,,, и код на c++ хотелось бы переписать на delphi В общем...

c++ union, аналог в pascal
Собственно. Обращение к одной и той же переменной по разным типам через переходники вида ...

union как определить из какой таблице запись после UNION?
Подскажите пожалуйста! Вот например две таблице (TEBLE_1) у которой поля row_1(BIGINT) и (TABLE_2)...

Union
Здравствуйте. Нужно сортировать записи в 2х таблицах по дате. Следующий запрос все делает как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru