Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140

Перевести строку кода из C#

31.10.2014, 07:03. Показов 1324. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как правильно перевести строку кода из C# в C++CLI:
C#
1
private List<ConnectionInfo> _connections = new List<ConnectionInfo>();
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.10.2014, 07:03
Ответы с готовыми решениями:

Как перевести строку из LineEdit в строку кода
Здравствуйте. У меня дано задание рассчитать интеграл от функции f(x)*exp(iwx), причем функцию f(x) я должен вводить через форму. Все...

Перевести строку кода из Delphi в C#
Здравствуйте, не знаю как этот код в одну строку будет в C#, может кто то поможет: код Delphi: var aux_int: Longword; value:...

Перевести строку кода из Delphi в C#
Здравствуйте, не знаю как этот код в одну строку будет в C#, может кто то поможет: код Delphi: var aux_int: Longword; value:...

17
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
31.10.2014, 07:25
C++
1
2
3
4
5
6
ref class MyClass
{
    List<ConnectionInfo^>^ _connections;
public:
    MyClass() : MyClass(gcnew List<ConnectionInfo^>()) {/*Код конструктора*/}
};
1
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
31.10.2014, 07:36  [ТС]
Т.е. если я правильно понял, то для этого нужно создать отдельный MyClass?
А _connections использовать так MyClass::_connections ?
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
31.10.2014, 08:04
Цитата Сообщение от gomodril Посмотреть сообщение
Т.е. если я правильно понял, то для этого нужно создать отдельный MyClass?
Нет, вы не правильно поняли. У вас есть класс в C# из которого вы скопировали эту строку. Очевидно, вы этот класс переносите на C++/CLI. Я не знаю, как называется ваш этот класс, потому я для него взял условное название MyClass.

Добавлено через 6 минут
Ах, да. Накосячил слегка в коде, писал прямо здесь.
C++
1
2
3
4
5
6
ref class MyClass
{
    List<ConnectionInfo^>^ _connections;
public:
    MyClass() : _connections(gcnew List<ConnectionInfo^>()) {/*Код конструктора*/}
};
1
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
31.10.2014, 09:13  [ТС]
Спасибо, помогло
А как быть с такими строками:
C#
1
            IPHostEntry localMachineInfo = Dns.GetHostEntry(Dns.GetHostName());
Делаю так:
C++
1
         IPHostEntry localMachineInfo = Dns::GetHostEntry(Dns::GetHostName());
И получаю ошибку - error C3673: System::Net::IPHostEntry: у класса нет конструктора копии
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
31.10.2014, 09:30
gomodril, в C++/CLI работа со ссылочными типами из управляемой кучи используется специальный управляемый указатель. Вы не обратили на это внимание в предыдущем ответе, поэтому сейчас я заостряю ваше внимание на этом. В C# ссылка на класс объявляется так:
C#
1
IPHostEntry localMachineInfo
В C++/CLI аналогичная ссылка объявляется так:
C++
1
IPHostEntry^ localMachineInfo
В связи с этим ваша строка в C++/CLI должны выглядеть так:
C++
1
IPHostEntry^ localMachineInfo = Dns::GetHostEntry(Dns::GetHostName());
0
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
31.10.2014, 14:16  [ТС]
А я то думал, что ^ ставится когда память выделяешь под объект, а оказывается еще и для ссылок. Спасибо за разъяснения.

Добавлено через 3 часа 39 минут
Опять засада. Не могу понять как эту строку правильно перевести:
C#
1
_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), _serverSocket);
делаю так:
C++
1
_serverSocket->BeginAccept(gcnew AsyncCallback(AcceptCallback), _serverSocket);
и получаю ошибку - error C3867: TCPServerCplusCLI::AsynchronousIoServer: :AcceptCallback: в вызове функции отсутствует список аргументов; используйте "&TCPServerCplusCLI::AsynchronousIoServe r::AcceptCallback" для создания указателя на член
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
31.10.2014, 14:28
gomodril, может стоит воспользоваться советом компилятора и:
используйте "&TCPServerCplusCLI::AsynchronousIoServe r::AcceptCallback" для создания указателя на член
0
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
31.10.2014, 14:34  [ТС]
Я если честно, в замешательстве... как эту подсказку использовать? Покажите как по вашему должна выглядеть эта строка.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
31.10.2014, 14:45
gomodril,
C++
1
_serverSocket->BeginAccept(gcnew AsyncCallback(&AcceptCallback), _serverSocket);
0
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
31.10.2014, 14:53  [ТС]
Так нельзя делать т.к. в C++CLI ссылки объявляются %. Соответственно компилятор пишет - error C2276: &: недопустимая операция с выражением привязанной функции-члена
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
31.10.2014, 15:21
Цитата Сообщение от gomodril Посмотреть сообщение
Так нельзя делать т.к. в C++CLI ссылки объявляются %
В C++\CLI знаком % объявляются ссылки на управляемые ресурсы, а обыкновенные ссылки & никто не отменял. Равно как и в случае с указателями, как говорил S_el: ^ - указатель на управляемый ресурс, в то время как * - обыкновенный

Строка "gcnew AsyncCallback(AcceptCallback)" на 100% корректна и, скорее всего, является правильной. Вопрос в том, как и где объявлена сама функция AcceptCallback
0
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
31.10.2014, 15:25  [ТС]
Вот сама функция AcceptCallback:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
      void AcceptCallback(IAsyncResult^ result) {
         ConnectionInfo^ connection = gcnew ConnectionInfo();
         try {
            // Завершение операции Accept
            Socket s = (Socket)result::AsyncState;
            connection->Socket = s::EndAccept(result);
            connection->Buffer = gcnew array <Byte>(255);
            //lock (_connections) _connections.Add(connection);
            LockHelper lockHelper;
            lockHelper::ConAdd(_connections, connection);
 
            // Начало операции Receive и новой операции Accept
            connection->Socket::BeginReceive(connection->Buffer, 0, connection->Buffer->Length, SocketFlags::None, new AsyncCallback(ReceiveCallback), connection);
            _serverSocket->BeginAccept(gcnew AsyncCallback(AcceptCallback), result::AsyncState);
         }
         catch (SocketException exc) {
            CloseConnection(connection);
            Console::WriteLine("Socket exception: " + exc::SocketErrorCode);
         }
         catch (Exception exc) {
            CloseConnection(connection);
            Console::WriteLine("Exception: " + exc);
         }
      }
объявлена в секции private в классе:
C++
1
public ref class AsynchronousIoServer {...};
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
31.10.2014, 15:27
Цитата Сообщение от gomodril Посмотреть сообщение
Так нельзя делать т.к. в C++CLI ссылки объявляются %.
Здесь вы неправы:
http://msdn.microsoft.com/ru-r... 3062a.aspx
1
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
31.10.2014, 19:00  [ТС]
Очень странное поведение. Добавил ссылку как в примере http://msdn.microsoft.com/ru-r... -snippet-1 строка приобрела вид
C++
1
_serverSocket->BeginAccept(gcnew AsyncCallback(&AcceptCallback), _serverSocket);
но при этом появляется ошибка error C2276: &: недопустимая операция с выражением привязанной функции-члена.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
31.10.2014, 19:56
Цитата Сообщение от gomodril Посмотреть сообщение
error C2276: &: недопустимая операция с выражением привязанной функции-члена.
Надо сделать функцию статической.
1
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
31.10.2014, 21:07  [ТС]
Да, это помогло, спасибо Но ошибки не закончились...
Теперь выскочила ошибка - error C2440: приведение типов: невозможно преобразовать "System::Object ^" в "System::Net::Sockets::Socket"
на строке:
C++
1
Socket^ s = (Socket)result->AsyncState;
метода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
static void AcceptCallback(IAsyncResult^ result) {
         ConnectionInfo^ connection = gcnew ConnectionInfo();
         try {
            // Завершение операции Accept
            Socket^ s = (Socket)result->AsyncState;
            connection->Sock = s->EndAccept(result);
            connection->Buffer = gcnew array <Byte>(255);
            //lock (_connections) _connections.Add(connection);
            LockHelper^ lockHelper;
            lockHelper->ConAdd(_connections, connection);
 
            // Начало операции Receive и новой операции Accept
            connection->Socket::BeginReceive(connection->Buffer, 0, connection->Buffer->Length, SocketFlags::None, new AsyncCallback(ReceiveCallback), connection);
            _serverSocket->BeginAccept(gcnew AsyncCallback(AcceptCallback), result::AsyncState);
         }
         catch (SocketException^ exc) {
            CloseConnection(connection);
            Console::WriteLine("Socket exception: " + exc->SocketErrorCode);
         }
         catch (Exception exc) {
            CloseConnection(connection);
            Console::WriteLine("Exception: " + exc);
         }
      }
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
31.10.2014, 21:26
gomodril, самая популярная ошибка

C++
1
Socket^ s = (Socket^)result->AsyncState;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.10.2014, 21:26
Помогаю со студенческими работами здесь

Перевести строку кода из Pascal в C#
Хочу перевести код с паскля на C# , но завис на одной строке Line : string ; Точнее я не знаю что такое $FF, подскажите как записать эту...

Перевести строку кода в Java
Я сейчас читаю книгу &quot;Экстремальное программирование - разработка через тестирование&quot;. И в ней мне попалась одна строка на Java,...

Перевести строку кода с PHP
есть такой вот кусочек кода написанный на php ds каким образом он выполниться на c#? include &quot;C:\file.pak&quot;; на php ds...

Перевести строку кода с Bash на Batch
вот необходимый мне код нашел, хотелось в DOS перевести... $find . -print0 -name &quot;*.php&quot; | xargs -0 grep -l...

Ввести строку, число N. Вывести введенную строку на экран N раз (перевести в 32 битную версию)
org 100h mov ah,9 mov dx,msg1 int 21h mov ah,0ah ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru