Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2015, 02:56   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию Консольное приложение и IdTCPServer

Всем привет. Решил побаловаться с консольными приложениями...


Никак не могу разобраться в чем ошибка ...

Код:
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#pragma argsused
#include <tchar.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdContext.hpp>
#include <IdCustomTCPServer.hpp>
#include <IdTCPServer.hpp>

TIdTCPServer *Server;

void __fastcall IdTCPServer1Connect(TIdContext *AContext) {
	cout << " + Somebody connected" << endl;
}


int _tmain(int argc, _TCHAR* argv[])
{

	Server = new TIdTCPServer(Application);
	Server->Active = false;
	Server->DefaultPort = 17223;
	Server->OnConnect = IdTCPServer1Connect;

	while (1) {
		getch();
	}

	return 0;
}

Цитата:
[bcc32 Error] File1.cpp(35): E2034 Cannot convert 'void(TIdContext *)' to 'TIdServerThreadEvent'
Ругается на строчку с
Код:
Server->OnConnect = IdTCPServer1Connect;
И вопрос в догонку: есть ли вообще создавать сервер в виде консольного приложения ? Или разницы никакой между VCl-приложением и консолью ?

Последний раз редактировалось -Jack-; 15.09.2015 в 02:59.
-Jack- вне форума Ответить с цитированием
Старый 16.09.2015, 07:49   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Ошибка очевидная - Вы пытаетесь присвоить обычную функцию в событие, которое ожидает метод какого-то класса/объекта с соответствующей сигнатурой.
Не знаю точно как в билдере, в дельфи это легко сделать, дав такую функцию произвольному объекту и присваивая обработчику события этот метод.
Вот нагуглил примерно то что надо http://codeverge.com/embarcadero.del...events/1044445
но вообще задача довольно распространённая, и думаю даже на форуме поиском можно найти решения.

Разница между консольным и оконным приложением есть в части приёма сообщений виндовса, для консоли их надо прикрутить. Для сервера на готовых компонентах инди это может быть и не важно.
А чем так консоль вперилась ? где удобно управлять сервером - ещё вопрос, само по себе приложение только чуть больше памяти будет есть, сбоев меньше не будет, это от программиста зависит.

Последний раз редактировалось phomm; 16.09.2015 в 07:54.
phomm вне форума Ответить с цитированием
Старый 19.09.2015, 00:57   #3
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Я решил сделать по другому, просто на проста создал наследника от TIdTCPServer и уже в его теле прописал весь необходимый код =)
-Jack- вне форума Ответить с цитированием
Старый 19.09.2015, 09:16   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
while (1) {
getch();
}
И что, оно будет работать?
Цитата:
Или разницы никакой между VCl-приложением и консолью ?
Ну разницы может и нет для прослушивания порта, но стопорить процесс ожиданием нажатия клавиши... Неужели сервер будет при этом нормально работать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.09.2015, 12:33   #5
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
И что, оно будет работать?
Ну разницы может и нет для прослушивания порта, но стопорить процесс ожиданием нажатия клавиши... Неужели сервер будет при этом нормально работать?
Проверял на 10 подключенных одновременно клиентах, вроде норм работает ... = )

А как поступить более правильно, чтобы консоль не закрывалась ?)
-Jack- вне форума Ответить с цитированием
Старый 19.09.2015, 15:44   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну я бы в поток дополнительный засунул.
Хотя наверное я чушь несу, индейка и так вроде многопоточна...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консольное приложение TRANE82 Помощь студентам 16 15.12.2012 23:03
с++, консольное приложение pavlovnik Фриланс 2 11.12.2011 22:52
консольное приложение unbanned Общие вопросы Delphi 12 01.11.2011 15:25
C++! Консольное приложение!!! TrueTeapot Помощь студентам 2 03.10.2008 06:32
Консольное приложение MAcK Общие вопросы Delphi 2 03.12.2006 18:28