powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / IP-клиент на managed С++ под NET
19 сообщений из 19, страница 1 из 1
IP-клиент на managed С++ под NET
    #39406922
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уж и не знаю куда писать, то-ли в NET раздел, то-ли в С++.)
Пишу IP-клиента на С++ в управляемом коде под System::Net::Sockets. На C# все отработал, теперь пероношу класс клиента в С++.
Не понимаю, что происходит, и как с этим бороться?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#pragma once
#using <System.dll>
using namespace System;
using namespace System::Text;
//using namespace System.String;
using namespace System::Net;
using namespace System::Net::Sockets;

//#pragma managed

class cIPClient
{
private:
	IPHostEntry ipHost;
	IPAddress ipAddr;
	IPEndPoint ipEndPoint;
	Socket sender;
	byte[] bytes;

Про байт потом, а остальные пишут примерно одно и то же - Ошибка C3076 cIPClient::ipEndPoint: нельзя внедрить экземпляр ссылочного типа "System::Net::IPEndPoint" в собственный тип.
В справке -"экземпляр":
нельзя внедрить экземпляр ссылочного типа "тип" в собственный тип
Машинный тип не может содержать экземпляр типа CLR.
Что с этим делать?
Код перенесен из С# и понемногу правится под срр.

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39406934
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде нашлось решение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
class cIPClient
{
private:
	IPHostEntry^ *ipHost;
	IPAddress^ *ipAddr;
	IPEndPoint^ *ipEndPoint;
	Socket^ *sender;
	byte[] bytes;

Теперь, чем заменить тип byte[] bytes;?
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39406979
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по возможности - забыть менеджед с++ как страшный сон
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39406982
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA, попробуйте так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
public ref class cIPClient {
private:
  IPHostEntry^ ipHost;
  IPAddress^ ipAddr;
  IPEndPoint^ ipEndPoint;
  Socket^ sender;
  cli::array<byte>^ bytes;

Код не компилировал.
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39406994
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пётр Седов,
Спасибо, уже сам дошел. Но там дальше пока не пойму. Ругается пока только и на array<Byte>^ bytes, и на cli::array<byte>^ bytes;
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39407000
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неожиданно скомпилировалось с
Код: plaintext
1.
array<Byte>^ bytes;

Не понял.
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39407004
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Следующий затык. На С# было:
Код: c#
1.
 byte[] msg = Encoding.UTF8.GetBytes(str);


Как это на с++ сказать? надо аналогичный массив определить. С array(Byte) что-то не идет.
1-й затык с переменной msg. Дальше вроде так:
Код: plaintext
1.
2.
3.
msg = Encoding::UTF8::GetBytes(str);
или
msg = Encoding::UTF8 ->GetBytes(str);
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39407020
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAУж и не знаю куда писать, то-ли в NET раздел, то-ли в С++.)
Пишу IP-клиента на С++ в управляемом коде под System::Net::Sockets. На C# все отработал, теперь пероношу класс клиента в С++.
А зачем? Из managed C++ можно вызывать код, написанный на C#
http://www.tangiblesoftwaresolutions.com/product_details/csharp_to_cplusplus_converter_details.html
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39407123
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneА зачем? Из managed C++ можно вызывать код, написанный на C#
http://www.tangiblesoftwaresolutions.com/product_details/csharp_to_cplusplus_converter_details.html А зачем?, если можно сразу на управляемом С++ писать.)
Наверно это кому-то действительно. Ну а мне интересно разобраться в технологии.
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39407315
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IP-клиента на управляемом С++ сделал. Создал консольное приложение Win32, вызываю из него Net класс. Класс создается и присоединяется к серверу. Однако, эту конструкцию победить не могу:
Код: plaintext
1.
2.
3.
string trans; 
string res;
res = ipCl->Transmite(trans);

Метод определен как
Код: plaintext
1.
String^ Transmite(String^ str);

Пишет:
Код: plaintext
1.
Ошибка	C2664	"System::String ^cIPClient::Transmite(System::String ^)": невозможно преобразовать аргумент 1 из "std::string" в "System::String ^"

. Код консоли неуправляемый. Не знаю как быть.
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39407472
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, все получилось. Преобразование сторок std::string в System::String и обратно было последней задачей.
Преобразование в System::String
Код: plaintext
1.
String ^Strans = gcnew String(trans.c_str());

И преобразование обратно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
void MarshalString(String ^ s, string& os) {
	using namespace Runtime::InteropServices;
	const char* chars =
		(const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
	os = chars;
	Marshal::FreeHGlobal(IntPtr((void*)chars));
}

MSDN, естественно.
К сожалению, в MSDN полно ошибок или очепаток, потому первые найденные решения не работали, и выдавали ошибки. Но, приведенные, уже правильные.
В общем, NET-код нормально работает совместно с неуправляемым, в данном случае NET IP-клиент с неуправляемой консолью. Никаких особых проблем не отмечено - только первый раз трудно, потом привыкаешь.))
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39409260
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При отладке клиент-сервера возникла следующая проблема. Для проверки восстановления связи клиент или сервер принудительно закрываются, при этом незакрытый клиент(сервер) еще пытаются работать до возникновения Exception, и далее сокет уничтожается, создается вновь и пытается установить связь.
После запуска клиента(сервера) они нормально соединяются, однако вся инфа, которую они пытались передавать уже после разрыва связи до возникновения Exception конкатенируется с новой, и, в итоге, одна из сторон в первом сообщении после коннекта получает полный бред.
Вопрос в том, где и как почистить этот буфер передачи или, м.б. приема, перед повторным установлением связи?
Код уничтожения сокета:
Код: plaintext
1.
2.
3.
sender->Shutdown(SocketShutdown::Both);
sender->Close();
sender->~Socket();

Лучше бы Despose(), но на него выдает ошибку и просит вызвать деструктор.
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39410042
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я где-то читал, и даже недавно писал на форуме, что NET, это не более чем обертка над обычным нативным кодом. За весь NET не скажу, а большинстве своем это так.
Кажется Изопропил в этом сильно усомнился. Я, вслед за ним, тоже стал сомневаться.
Однако, сделав смешанную прогу на нативной и NET функциональности, убедился, что это действительно так.
Когда я стал обвешивать прjграмму блоками try-catch, моделировать Exceptions, и подробно смотреть точки останова, то открывались h-файлы с точками останова, в которых ничего даже близкого к Framework не было. И даже если смотреть сами исключения, то объясняются они не в рамках NET, а в рамках библиотек Виндовс или MFC.
Конечно безумие, писать на С++ программы на смешанном коде, где переменные вначале преобразуются (или самому необходимо это сделать) к NET формату, затем, в глубинах NET, опять преобразуются к формату С++, а на выходе мы имеем опять тот же самый но обратный процесс.
Безусловно это некий дурдом, но оч удобный.) Я было попробовал тоже самой сделать на MFC и WinAPI, однако это требует значительно больших усилий как по времени, так и просто по количеству кода.
В общем, если мелкосекунды не волнуют, то настоятельно рекомендую.
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39410047
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAКажется Изопропил в этом сильно усомнился
тебе показалось ))
и ещё один момент - в net от mfc даже запаха нет
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39410054
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил, А откуда там при Exceptions вылезают MFC-хидеры? Да и в хелпах по номерам исключений вылезают либо Win библиотеки, либо MFC. Как это можно объяснить иначе?
Имхо, разумно предположить, что MS не все с нуля делало, а использовало предыдущие наработки, включая и MFC. Хотя, я и не утверждал, что NET построен на MFC, но то, что использует, имхо, очевидно.
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39410055
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAно то, что использует, имхо, очевидно.
но неправда. Сорцы доступны.


а то что F1 частенько в небо кажет - факт
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39410063
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропила то что F1 частенько в небо кажет - фактЭт точно. Exception есть, а раздела нет.))
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39410075
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBAИзопропил, А откуда там при Exceptions вылезают MFC-хидеры? Да и в хелпах по номерам исключений вылезают либо Win библиотеки, либо MFC. Как это можно объяснить иначе?
Имхо, разумно предположить, что MS не все с нуля делало, а использовало предыдущие наработки, включая и MFC. Хотя, я и не утверждал, что NET построен на MFC, но то, что использует, имхо, очевидно.Очевидна только твоя безграмотность.
...
Рейтинг: 0 / 0
IP-клиент на managed С++ под NET
    #39410105
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglОчевидна только твоя безграмотность.Вернейший способ быть обманутым, считать себя умнее других. (народная мудрость.))
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / IP-клиент на managed С++ под NET
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]