Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126

Использование исходных кодов C++ в С#

14.11.2010, 01:22. Показов 5214. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброй ночи, форумчане!


Есть несколько структур, глобальных переменных и пара классов, написанных и отлаженных на С++. Надо всё это добро использовать в проекте, написанном на С#. Подскажите, как это лучше сделать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2010, 01:22
Ответы с готовыми решениями:

Конвертер Исходных кодов
Здравствуйте! Появилась отличная идея! Вообщем, создать программу в которую пользователь загружает исходный код на Delphi, а она...

Компиляция исходных кодов C#
Всем привет. Нужно реализовать чтение исходных данных и запись в файл результатов программы using System; using...

Сборка php из исходных кодов
Добрый день! Пытаюсь собрать php из исходников, для того, чтобы он корректно работал с SSL (по этой статье:...

11
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
14.11.2010, 02:26
Либо создавать DLL, либо переписывать. Смотря как всё это должно использоваться.
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
14.11.2010, 05:40
Цитата Сообщение от silicium Посмотреть сообщение
Есть несколько структур, глобальных переменных и пара классов, написанных и отлаженных на С++. Надо всё это добро использовать в проекте, написанном на С#. Подскажите, как это лучше сделать?
Писать на MC++....
0
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
14.11.2010, 09:22  [ТС]
Цитата Сообщение от sigmov Посмотреть сообщение
Писать на MC++....
Что это такое?

Цитата Сообщение от SSTREGG Посмотреть сообщение
создавать DLL
Имеется ввиду библиотека классов?

Цитата Сообщение от SSTREGG Посмотреть сообщение
переписывать
А в одном проекте исходные коды си++ и си шарп компилироваться не могут?
0
Заблокирован
14.11.2010, 09:31
Цитата Сообщение от silicium Посмотреть сообщение
Что это такое?
Managed C++. На самом деле, лучше забудь. MC++ - это кривой вброс мелкомягких, про который все (и они в том числе) благополучно к данному моменту забыли. Сейчас в моде C++/CLI.

Цитата Сообщение от silicium Посмотреть сообщение
Имеется ввиду библиотека классов?
Нет, имеется ввиду именно DLL. Её потом можно с помощью P/Invoke заюзать из шарпа.

Цитата Сообщение от silicium Посмотреть сообщение
А в одном проекте исходные коды си++ и си шарп компилироваться не могут?
Нет. Но можно по-отдельности скомпилять шарповский код и код на C++/CLI, а потом смержить в одну сборку.
1
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
16.11.2010, 12:12  [ТС]
Цитата Сообщение от NightmareZ Посмотреть сообщение
Нет, имеется ввиду именно DLL. Её потом можно с помощью P/Invoke заюзать из шарпа.
Насколько я понимаю, DLL строго говоря позволяет вставлять функции, а не классы. А нужен имено си++, а не си.


Цитата Сообщение от NightmareZ Посмотреть сообщение
можно по-отдельности скомпилять шарповский код и код на C++/CLI, а потом смержить в одну сборку.
Очень интересно. А можно поподробнее про эту технологию?
0
Заблокирован
16.11.2010, 13:55
Цитата Сообщение от silicium Посмотреть сообщение
Очень интересно. А можно поподробнее про эту технологию?
C++/CLI
0
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
21.11.2010, 16:41  [ТС]
Собственно, проблема локализовалась:
есть следующий код на си++
C++
1
2
3
4
    int GetRegs(uint8_t adev, uint8_t areg, int length, uint32_t* dregs, uint8_t* resus)
    {
        return rawServer->GetRegs(adev,areg,length,dregs,resus);
    }
в нём два последние аргумента - массивы длинны length. Код скомпилирован как библиотека классов и встроен в качестве .dll в проект на Си#.

Вопрос: как вызвать метод? с какими аргументами.
Вот такой код:
C#
1
2
3
4
5
6
7
        _result rdRegFIFO(UInt32 addr, UInt32 regAddr, UInt32 count, out UInt32[] vals)  
        {
            vals = new UInt32[count];
            UInt32[] resus = new UInt32[count];
            base.GetRegs((byte)addr, (byte)regAddr, (int)count, vals, resus);
            return _result.success;
        }
выдаёт ошибку преобразования.
Сообщает: невозможно преобразовать uint[] в uint*. Как быть?
0
Заблокирован
21.11.2010, 19:11
Цитата Сообщение от silicium Посмотреть сообщение
Сообщает: невозможно преобразовать uint[] в uint*. Как быть?
Ну правильно. Массив - это объект управляемого класса, а указатель - тупо адрес памяти. Нужно залочить объект, чтобы рантайм его не вздумал перемещать, а потом получить указатель на первый элемент. Примерно так:
C#
1
2
3
4
5
6
vals = new UInt32[count];
UInt32[] resus = new UInt32[count];
fixed (int* ptr = vals)
fixed (int* resusPtr = resus)
    base.GetRegs((byte)addr, (byte)regAddr, (int)count, ptr, resusPtr);
return _result.success;
1
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
21.11.2010, 21:47  [ТС]
А как передавать в качестве аргументов структуры и ссылки?
А именно:
C++
1
2
3
4
int GetReg(uint8_t adev, uint8_t areg, uint32_t& dreg)
{
    return rawServer->GetReg(adev,areg,dreg);
}
при подстановке GetReg в Си шарп Intellisence считает третий аргумент указателем.

а для данной функции :
C++
1
2
3
4
5
6
int connect(IPAddress _host_ip, int _host_port, IPAddress _kpac_ip, int _kpac_port, initParams  iniparm)
{
.
.
.
}
вообще говорит, что данный тип функции не поддерживается (из-за пятого аргумента)

не говоря уже о странной манере преобразования int производных типов...
0
Заблокирован
21.11.2010, 22:33
Цитата Сообщение от silicium Посмотреть сообщение
А как передавать в качестве аргументов структуры и ссылки?
А именно:
C++
1
2
3
4
int GetReg(uint8_t adev, uint8_t areg, uint32_t& dreg)
{
    return rawServer->GetReg(adev,areg,dreg);
}
при подстановке GetReg в Си шарп Intellisence считает третий аргумент указателем.
Потому что ссылка на самом деле и есть указатель.

Цитата Сообщение от silicium Посмотреть сообщение
а для данной функции :
C++
1
2
3
4
5
6
int connect(IPAddress _host_ip, int _host_port, IPAddress _kpac_ip, int _kpac_port, initParams  iniparm)
{
.
.
.
}
вообще говорит, что данный тип функции не поддерживается (из-за пятого аргумента)
Текст ошибки приведи.

Цитата Сообщение от silicium Посмотреть сообщение
не говоря уже о странной манере преобразования int производных типов...
Всмысле?
0
5 / 5 / 1
Регистрация: 26.10.2010
Сообщений: 126
22.11.2010, 11:57  [ТС]
Цитата Сообщение от NightmareZ Посмотреть сообщение
Текст ошибки приведи.
C++
1
2
3
4
5
6
int connect(IPAddress _host_ip, int _host_port, IPAddress _kpac_ip, int _kpac_port, initParams  iniparm) {
.
.
.
    return OK;
}
C#
1
2
3
4
5
6
7
8
9
10
IPAddress host_ip;// = new IPAddress(0x80000001); //127.0.0.1
IPAddress kpat_ip;// = new
UInt16 host_port;
UInt16 kpat_port;
.
.
.
initParams connect_params = new initParams();
 
int result = base.connect(host_ip.Address, (int)host_port, kpat_ip.Address, (int)kpat_port, connect_params);
ошибка:
"connect" не поддерживается данным языком




Цитата Сообщение от NightmareZ Посмотреть сообщение
не говоря уже о странной манере преобразования int производных типов...
тип byte преобразуется в int, тип long - тоже. При попытке передать аргумент отличного от int типа, например long (хотя в с++ коде был long), начинается ругань
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2010, 11:57
Помогаю со студенческими работами здесь

Обфускация компилируемых исходных кодов
Хотелось бы поподробнее узнать по поводу обфускации компилируемых исходных кодов. Вот, например, есть обфускатор Stunnix C++, (да и не...

Просмотр исходных кодов режиме реального времени
Доброго времени суток, ребята! очень долго мучаюсь и не могу найти программу, которая позволила бы просматривать выполнение процессов...

Восстановление исходных кодов используя папку build
Добрый день. Случайно удалил (shift + Del) папку с проектом, копий не осталось, Git'ом не пользуюсь (теперь начну). Однако у меня...

Извлечение исходных кодов метода, методики самопознания
Дамы и господа, помогите, пожалуйста. Есть некий модуль, в нем некий метод, задача - узнать что происходит в недрах метода и...

[Gentoo] При установке исходных кодов Gentoo выдает ошибки
После команды emerge gentoo-sources получаю вот такое сообщение С английским не дружу. Подскажите, в чем проблема и как исправить...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru