Просмотр полной версии : [c/c++] Новичкам: задаем вопросы
Страницы :
1
2
3
4
5
6
7
8
9
[
10]
11
12
13
14
15
16
17
18
19
20
21
22
Вроде и сервер работает.
Только вот как реализовать получение сообщений в любое время?
Допустим я отпарвил на сервер текст. Чтоб сервер его принял , необходимо там сделать recv(); , а если сервер не ждет? Допустим чаты же как то делают.
Нужно сделать рекурсию на сервере.
Допиши в конце кода сервера, перед ретурном:
main();
не уверен, но скорее всего будет работать
groundhog
05.02.2009, 17:34
Glazz, сервер на то и сервер, что он всегда ждёт соединения, он случает какой-то порт, принимает на него соединение, запускает отдельный поток для обработки этого соединения, и продолжает слушать порт...
Glazz, сервер на то и сервер, что он всегда ждёт соединения, он случает какой-то порт, принимает на него соединение, запускает отдельный поток для обработки этого соединения, и продолжает слушать порт...
а вот еще - если сервак принял чела , допустим идет обмен всяким , ну займет секунд 30. Второй клиент будет ждать это время? а если очередь из 10 человек? вот как эта многопоточность еще делается?
groundhog
05.02.2009, 17:59
почитай про функцию accept из WinSock. Никто ничего не ждёт...
почитай про функцию accept из WinSock. Никто ничего не ждёт...
Ну читал , он очередь из листена разргребает , ну ...
Видать я не правильно объясняю.
Допустим вот код:
while((client_s = accept(s, (sockaddr *)&client_addr,&client_addr_size)))
{
send();
....
}
Ведь в таком случае каждый клиент будет ждать так?
А как сделать , чтоб одновременно могло обслуживаться 2 иболее человека?
Я конечно быдлокодер , я начинал изучать Си++ , потом мне сказали лучше Си , и вот я ООП си++ Р. Лафоре половину прочел и начал писать на си.
Может мне нужно Многозадачность?
xismyname
05.02.2009, 19:10
Нужно сделать рекурсию на сервере.
Допиши в конце кода сервера, перед ретурном:
main();
не уверен, но скорее всего будет работать
ЛОЛ )))) , скажу правду,более тупую вещь я еще не слышал.
xismyname
05.02.2009, 19:15
Ну читал , он очередь из листена разргребает , ну ...
Видать я не правильно объясняю.
Допустим вот код:
while((client_s = accept(s, (sockaddr *)&client_addr,&client_addr_size)))
{
send();
....
}
Ведь в таком случае каждый клиент будет ждать так?
А как сделать , чтоб одновременно могло обслуживаться 2 иболее человека?
Я конечно быдлокодер , я начинал изучать Си++ , потом мне сказали лучше Си , и вот я ООП си++ Р. Лафоре половину прочел и начал писать на си.
Может мне нужно Многозадачность?
Да, тебе нужно копать в стороны многопоточности.
Есть два решения,создать асинхронные сокеты или многопоточность.Первое долго объяснять, второе покажу на примере :
while(1)
{
SOCKET childSocket = accept(LocalSocket,NULL,NULL);
if( childSocket != -1 )
{
CreateThread(....);
}
}
Насчет CreateThread() прочти в мсдн.
Да, тебе нужно копать в стороны многопоточности.
Насчет CreateThread() прочти в мсдн.
Читать же на msdn.microsoft.com ? у меня проблема - не могу зайти по домену на сайт , тока по ипу. И т.е. карртинки все н егрузятся и т.д. :\ пишет - невозможно найти сервер.
BlackSilver
06.02.2009, 13:10
Читать же на msdn.microsoft.com ? у меня проблема - не могу зайти по домену на сайт , тока по ипу. И т.е. карртинки все н егрузятся и т.д. :\ пишет - невозможно найти сервер.
Купи на базаре диск и поставь себе свой msdn. Пригодится.
Купи на базаре диск и поставь себе свой msdn. Пригодится.
я знаю только то , что MSDN - MS Developer Network.
Больше о нем ничего. Я думал найти на их сайте описание - для чего используется и как работает. Тока вот чото проблема - попасть на сайт не могу , в C:\windows\system32\drivers\etc\hosts все норм.
Только вот чото антивирусник то же не может обновится , так же не может понять адрес сервера , боюсь здесь вирусней пахнет.
а ты на MSDN по IP зайди ))) http://207.46.16.248/
Но чтобы лазеть по нормальному там пропиши IP на msdn.microsoft.com в hosts
NigHT_0WL
06.02.2009, 14:51
Microsoft Developer Network (англ. MSDN) — подразделение компании Майкрософт, ответственное за взаимодействие фирмы с разработчиками. В данном случае, под разработчиками понимаются разработчики аппаратного обеспечения, интересующиеся операционной системой, а также разработчики, использующие программные интерфейсы операционной системы и скриптовые языки различных приложений, разработанных Microsoft. Такое взаимодействие с разработчиками имеет несколько форм: веб-сайты, новостные рассылки, конференции разработчиков, блоги, рассылка CD/DVD. Жизненный цикл взаимодействия с разработчиками варьируется от поддержки уже устаревших продуктов до распространения информации о новых возможностях.
Подразделение работает как информационный сервис для разработчиков программного обеспечения. Основное внимание (в последнее время) уделяется платформе Microsoft .NET, но присутствуют и статьи, охватывающие такие области как практика программирования и шаблоны проектирования. Многие ресурсы доступны бесплатно в онлайн, другие — только по почте на основе платной подписки. В зависимости от уровня подписки, подписчики могут получать ранние редакции новых версий операционных систем или других продуктов Майкрософт (приложения Microsoft Office, Visual Studio и др.). Некоторые университеты включены в программу MSDN Academic Alliance (MSDNAA), что позволяет студентам получать преимущества подписки MSDN.
В ноябре 2004 года был открыт сайт MSDN2, в качестве источника информации по Visual Studio 2005. Помимо содержания, наиболее заметное отличие от «старого» MSDN — обновлённый код веб-сайта, который лучше соответствует веб-стандартам, что даёт давно ожидаемую возможность использования не только IE, но и альтернативных веб-браузеров.
№№№№№№№№№№№№№№№№ №№№№№№№№№
Подписки на MSDN обеспечивают программную поддержку Visual Studio и могут помочь группам разработчиков повысить эффективность работы и производительность. Подписки на MSDN — это выгодный способ лицензирования платформ и средств корпорации Майкрософт, получения технической поддержки и приоритетного доступа к новым версиям продуктов корпорации, включая операционные системы, серверное программное обеспечение и офисные приложения. Подписки на MSDN дополняют Visual Studio полным комплектом ресурсов для поддержки рабочих групп на каждом этапе работы.
В рамках подписки MSDN, можно получить:
Средства разработчика
Подписки на MSDN класса «Professional» и «Premium» приобретаются в комплекте с Visual Studio. Подписываясь на MSDN, пользователи одновременно получают права на другие средства разработчика, включая Visual Studio SourceSafe, пакеты разработчика программного обеспечения и драйверов (SDK/DDK) и другие компоненты платформы Microsoft Developer. Обладатели системы Visual Studio Team System с подпиской MSDN Premium получают также эксклюзивную версию Workgroup Edition программы Visual Studio Team Foundation Server с ограничением до пяти пользователей.
Лицензии на разработку и тестирование
Разработчики должны не только уметь использовать средства для создания приложений, но и моделировать рабочие среды для многократной разработки и тестирования. Основное преимущество подписчиков MSDN — эксклюзивный доступ к широчайшему диапазону продуктов корпорации Майкрософт для создания таких сред разработки и тестирования.
Эксклюзивный доступ к предварительным версиям продуктов
Чтобы удержаться на гребне волны, разработчикам необходим доступ к новейшим продуктам и технологиям до того, как они получат широкое распространение. Подписки на MSDN предоставляют доступ к предварительным версиям будущих продуктов и технологий корпорации Майкрософт, возможный только в рамках закрытых программ, например, программ технического внедрения или быстрой разработки (TAP/RDP). К этой категории относится большинство бета-версий, Community Technology Previews (CTP) и, в некоторых случаях, альфа-версии. Например, подписчики MSDN получили первую предварительную сборку Windows Vista более чем за три года до начала продаж.
Лицензии для использования в организации в целом
В дополнение к средствам разработчика и лицензиям, которые можно использовать только для разработки & тестирования, подписчики MSDN могут устанавливать и использовать в любых целях одну копию Microsoft Office. Это право распространяется на все продукты для настольной системы Office (за исключением Project Professional).
Технические консультации
Подписчики MSDN могут обращаться за помощью при решении сложнейших возможностей разработки к инженерам из службы технической поддержки корпорации Майкрософт. В каждую подписку MSDN входят профессиональные консультации службы технической поддержки по вопросам разработки. На уровне 24/7 Business-Critical service за технической консультацией можно обращаться в любой ситуации.
Администрируемые группы новостей
Обычно разработчики в первую очередь адресуют свои вопросы сообществу. Если члены сообщества не в состоянии ответить на самые сложные вопросы, подписчики MSDN могут получить эксклюзивную гарантию ответа. Если группа новостей MSDN не сможет ответить на вопрос подписчика MSDN, вопрос будет в течение 2 рабочих дней передан инженерам корпорации Майкрософт.
Служба Online Concierge
MSDN.com — это мощнейший сетевой ресурс с информацией для разработчиков. Здесь содержится столько сведений, что иногда приходится довольно долго прокручивать страницы и переходить от одной страницы к другой. MSDN Online Concierge — это служба на базе мгновенных сообщений, предоставляющая подписчикам эксклюзивную справку по интерактивному миру MSDN.
Библиотека MSDN
Библиотека MSDN — это полный набор справочной информации по разработке приложений на платформе Microsoft. Подписчики MSDN имеют доступ к полной сетевой библиотеке и периодическим обновлениям для установки и автономного просмотра.
Журнал «MSDN Magazine»
Журнал «MSDN Magazine» издает компания CMP Media совместно с корпорацией Майкрософт. В нем публикуются некоторые из наиболее интересных редакторских и авторских материалов по разработке, написанных ведущими разработчиками корпорации Майкрософт. Журнал MSDN Magazine выходит ежемесячно и бесплатно доставляется североамериканским подписчикам. Подписчики со всего мира оплачивают только доставку.
Новости MSDN
Миллионы разработчиков два раза в месяц получают по электронной почте новостную рассылкуНовости MSDN с новостями и информацией, выбранной по интересам. Подписчики могут выбрать новости, относящиеся к подписке.
Билеты на события корпорации Майкрософт и MSDN со скидкой
События корпорации Майкрософт, предназначенные для разработчиков (например, TechEd и PDC) — это возможность пройти обучение и поделиться новейшими разработками, предоставленная партнерам корпорации и сообществу разработчиков. Подписчикам MSDN регулярно предлагается эксклюзивная скидка на посещение таких событий.
Партнерские предложения
Разработка платформы Microsoft стала возможной благодаря богатой экосистеме партнерских продуктов, технологий и услуг. Подписчики MSDN имеют доступ к эксклюзивным скидкам, бесплатным пробным версиям и предложениям партнеров корпорации Майкрософт.
Обслуживание пользователей
Созданная в каждом регионе специализированная сеть специалистов по обслуживанию пользователей гарантирует, что подписчики получат всю необходимую помощь по подписке на нужном языке.
Visual Studio Team System 2008 Team Suite c MSDN Premium
Наиболее полная версия, приобретается в комплекте с Visual Studio Professional и входит в пакет Visual Studio Team System
VStudio Team Suite All Lng Lic/SA Pack OLP NL w/MSDN Prem Qualified
Взято из : http://www.it-enigma.ru/product/software/msdn/
Как я понимаю , библиотеку покупать нужно Оо
И как пользоваться непонятно.
а фаил windows.h не эта бблиотека?
groundhog
06.02.2009, 15:11
Можно скачать, можно купить, можно подписаться у мелкософта и они тебе будут высылать. А пользоваться проще некуда - это одна большая справка по всем технологиям, продуктам, языкам и интерфейсам, которые разрабатываются и курируются микрософтом... Запустил и ищи не хочу... Только знание английского нужно.
Можно скачать, можно купить, можно подписаться у мелкософта и они тебе будут высылать. А пользоваться проще некуда - это одна большая справка по всем технологиям, продуктам, языкам и интерфейсам, которые разрабатываются и курируются микрософтом... Запустил и ищи не хочу... Только знание английского нужно.
а бибилотека этo windows.h ?
groundhog
06.02.2009, 15:25
Нет, windows.h - это включаемый файл, файл, который используется при разработке. В нём содержатся все типы данных, описания функций WINAPI и ссылки на множество других таких файлов. Библиотекой в среде разработчиков принято называть кое-что другое...
herfleisch
06.02.2009, 19:19
а бибилотека этo windows.h ?
windows.h - это заголовочный файл.
какие есть библиотеки для работы с сетью?
winsock.dll (winsock.h) - работа с сокетами, основная библиотека для работы с сетью.
winhttp.dll Работа c http .
icmp.dll Работа с ICMP протоклом.
winsock.dll
WS2_32.dll уже
+wininet.dll
herfleisch
07.02.2009, 00:21
Ты уж только не забывай про #pragma comment(lib, "ws2_32.lib")
Помогите . Возника проблема с BCB++ , компилю обычный консольный проэкт тупо Hello World через printf , у меня она работает , но на других машинах выдает такое "Приложению не удалось запуститься , посколько CC328.DLL не был найдет" .
Из за чего может такое быть ? Знаю что библотека BCB++ , у меня она имеется в систем32 , так как стоит BCB++ . Может в настройках проэкта что поменять ?
В классе есть функция void show (massiv *test, int, int, int ); //int этовсе параметры типа цвета фона, цвета текста и.т.д
massiv моя структура
Вобщем эта функция показывает этот самый массив
возможно ли перегрузить оператор <<
что бы в программе можно было использовать cout << test;
Или это впринципи не возможно?
2Fl0dER Наверное надо смотреть что нибудь связаное с линковкой библиотек, в настройках проекта
2Fl0dER Наверное надо смотреть что нибудь связаное с линковкой библиотек, в настройках проекта
Все настройки перекопал , всеравно тоже самое =(
Помогите , я уже руки повесил ...
Есть в cpp какая-нибудь функций конвертирования HEX 2 ASCII ???
Ex: 31323334 => 1234
я отключил в опциях проэкта Dinamic RTL , и поставил Disable Incremental Link , теперь CC3280.dll не просит , но размер проэкта вырос из 6кб в 120кб . Неужели у всех так ?
Может чтото неправильно выставлено ? Помогите...
в createthread вызываю функцию которой надо передать несколько параметров, как это сделать?
в createthread вызываю функцию которой надо передать несколько параметров, как это сделать?
четвертым параметром передавай адрес структуры с нужными данными. Так как потоки выполняются в одном адресном пространстве то проблем не будет;)
http://msdn.microsoft.com/en-us/library/ms682453(VS.85).aspx
Fl0dER всё правильно .. т.к надругом компе небыло какойто библиотеки то прога не запускалась после того как ты изменил настройки библиотека записалась в исполняемый файл =) поэтому и размер вырос ..
Fl0dER всё правильно .. т.к надругом компе небыло какойто библиотеки то прога не запускалась после того как ты изменил настройки библиотека записалась в исполняемый файл =) поэтому и размер вырос ..
А какже на BCB++ пишутся маленькие вирусы ?.. если даже простейший Hello World... 128кб =/
Fl0dER, вирусы пишутся на асемблере или чистом вин-апи. В результате чего и получаются такими маленькими.
Да знаю я , я напсал на BCB++ черьвя на чистом API ,без VCL , получился весом 8 кб . Но при запуске на других компах просит библу , вот и получается без Dynamic RTL получается 130кб , обидно !!! =(
Хотел перекинуть на VC++ проэкт , но там 4 ошибки при компилинге , пытался исправить , но для меня VC++ непонятен ... почему он упрямится =(
А нельзя узнать зачем ему эта библиотека, и переписать код без её использования?
Можно сделать копию библиотеки, и все ненужные функции обрезать, займет время, но хорошо отразится на размере конечной программы
А нельзя узнать зачем ему эта библиотека, и переписать код без её использования?
Дела в том что даже вот такой простещий код
//---------------------------------------------------------------------------
#include <iostream.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
printf("Hello World");
return 0;
}
//---------------------------------------------------------------------------
при компиляции требует эту библу
Дела в том что даже вот такой простещий код
//---------------------------------------------------------------------------
#include <iostream.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
printf("Hello World");
return 0;
}
//---------------------------------------------------------------------------
при компиляции требует эту библу
Этот код может требовать только stdio.h, в ней находится printf. Но зачем в твоём вире printf???
Этот код может требовать только stdio.h, в ней находится printf. Но зачем в твоём вире printf???
В моем вире нет printf только wsprintf , просто я о том что у меня может косяк с BCB++ что даже в простом проэкте требует CC3280.dll :confused:
Fl0dER на скоко я увидел в гугле проблемы с этим фйлом возникают при использовании borland попробуй пересесть на VS и аокажи ошибки которые он те выводит может общими усилиями решим проблему =)
#include <iostream>
using namespace std;
main()
{
cout << "hello world";
return 0;
}
Тоже требует?
#include <iostream>
using namespace std;
main()
{
cout << "hello world";
return 0;
}
Тоже требует?
Да , также требует CC3280.dll
Fl0dER на скоко я увидел в гугле проблемы с этим фйлом возникают при использовании borland попробуй пересесть на VS и аокажи ошибки которые он те выводит может общими усилиями решим проблему =)
void _fastcall TRASReader::Construct()
{
FLSAListCount = 0;
FLSAList = NULL;
lib = LoadLibrary("kernel32.dll");
XRtlMoveMemory = (TRtlMoveMemory *) GetProcAddress(lib, "RtlMoveMemory");
XRtlZeroMemory = (TRtlZeroMemory *) GetProcAddress(lib, "RtlZeroMemory");
}
Вот тут ошибки
1>e:\гыи\rasreader.cpp(11) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'HANDLE' to 'HMODULE'
1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast
1>e:\гыи\rasreader.cpp(12) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'HANDLE' to 'HMODULE'
1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast
void _fastcall TRASReader::Construct()
{
FLSAListCount = 0;
FLSAList = NULL;
lib = LoadLibrary("kernel32.dll");
XRtlMoveMemory = (TRtlMoveMemory *) GetProcAddress(lib, "RtlMoveMemory");
XRtlZeroMemory = (TRtlZeroMemory *) GetProcAddress(lib, "RtlZeroMemory");
}
Вот тут ошибки
1>e:\гыи\rasreader.cpp(11) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'HANDLE' to 'HMODULE'
1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast
1>e:\гыи\rasreader.cpp(12) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'HANDLE' to 'HMODULE'
1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Заменил Handle на HModule при компилиции терь такое О_о
1>main.obj : error LNK2019: unresolved external symbol _send@16 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _closesocket@4 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _connect@12 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _inet_addr@4 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _htons@4 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _socket@12 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _inet_ntoa@4 referenced in function "int __stdcall GetIpByHostName(char *,char *,unsigned long)" (?GetIpByHostName@@YGHPAD0K@Z)
1>main.obj : error LNK2019: unresolved external symbol _gethostbyname@4 referenced in function "int __stdcall GetIpByHostName(char *,char *,unsigned long)" (?GetIpByHostName@@YGHPAD0K@Z)
1>main.obj : error LNK2019: unresolved external symbol _WSAStartup@8 referenced in function "int __cdecl send_psw(void)" (?send_psw@@YAHXZ)
1>main.obj : error LNK2019: unresolved external symbol _RasEnumConnectionsA@12 referenced in function "bool __cdecl IsInternetConnected(void)" (?IsInternetConnected@@YA_NXZ)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasEnumEntriesA@20 referenced in function "protected: unsigned long __fastcall TRASReader::GetRasEntryCount(void)" (?GetRasEntryCount@TRASReader@@IAIKXZ)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasGetEntryPropertiesA@24 referenced in function "public: char * __fastcall TRASReader::GetRasEntries(void (__fastcall*)(char *,char *,char *,char *,char *),bool *)" (?GetRasEntries@TRASReader@@QAIPADP6IXPAD0000@ZPA_ N@Z)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasGetEntryDialParamsA@12 referenced in function "public: char * __fastcall TRASReader::GetRasEntries(void (__fastcall*)(char *,char *,char *,char *,char *),bool *)" (?GetRasEntries@TRASReader@@QAIPADP6IXPAD0000@ZPA_ N@Z)
1>MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
void _fastcall TRASReader::Construct()
{
FLSAListCount = 0;
FLSAList = NULL;
lib = GetModuleHandle(TEXT("kernel32.dll"));//lib типа HMODULE
XRtlMoveMemory = (TRtlMoveMemory *) GetProcAddress(lib, "RtlMoveMemory");
XRtlZeroMemory = (TRtlZeroMemory *) GetProcAddress(lib, "RtlZeroMemory");
}
попробуй так у меня нормально все компилится.
void _fastcall TRASReader::Construct()
{
FLSAListCount = 0;
FLSAList = NULL;
lib = GetModuleHandle(TEXT("kernel32.dll"));//lib типа HMODULE
XRtlMoveMemory = (TRtlMoveMemory *) GetProcAddress(lib, "RtlMoveMemory");
XRtlZeroMemory = (TRtlZeroMemory *) GetProcAddress(lib, "RtlZeroMemory");
}
попробуй так у меня нормально все компилится.
1>e:\гыи\rasreader.cpp(11) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'HANDLE' to 'HMODULE'
1> Conversion from 'void*' to pointer to non-'void' requires an explicit cast
1>e:\гыи\rasreader.cpp(12) : error C2664: 'GetProcAddress' : cannot convert parameter 1 from 'HANDLE' to 'HMODULE'
такие же ошибки :eek:
а lib типом Handle оставлять ?
я же в коментах написал что типа HMODULE
lib = GetModuleHandle(TEXT("kernel32.dll"));//lib типа HMODULE
я же в коментах написал что типа HMODULE
lib = GetModuleHandle(TEXT("kernel32.dll"));//lib типа HMODULE
Все зделал , но не хочет компилица =(
1>main.obj : error LNK2019: unresolved external symbol _send@16 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _closesocket@4 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _connect@12 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _inet_addr@4 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _htons@4 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _socket@12 referenced in function "int __stdcall SendDataToServer(void *,unsigned long,unsigned short,char *)" (?SendDataToServer@@YGHPAXKGPAD@Z)
1>main.obj : error LNK2019: unresolved external symbol _inet_ntoa@4 referenced in function "int __stdcall GetIpByHostName(char *,char *,unsigned long)" (?GetIpByHostName@@YGHPAD0K@Z)
1>main.obj : error LNK2019: unresolved external symbol _gethostbyname@4 referenced in function "int __stdcall GetIpByHostName(char *,char *,unsigned long)" (?GetIpByHostName@@YGHPAD0K@Z)
1>main.obj : error LNK2019: unresolved external symbol _WSAStartup@8 referenced in function "int __cdecl send_psw(void)" (?send_psw@@YAHXZ)
1>main.obj : error LNK2019: unresolved external symbol _RasEnumConnectionsA@12 referenced in function "bool __cdecl IsInternetConnected(void)" (?IsInternetConnected@@YA_NXZ)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasEnumEntriesA@20 referenced in function "protected: unsigned long __fastcall TRASReader::GetRasEntryCount(void)" (?GetRasEntryCount@TRASReader@@IAIKXZ)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasGetEntryPropertiesA@24 referenced in function "public: char * __fastcall TRASReader::GetRasEntries(void (__fastcall*)(char *,char *,char *,char *,char *),bool *)" (?GetRasEntries@TRASReader@@QAIPADP6IXPAD0000@ZPA_ N@Z)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasGetEntryDialParamsA@12 referenced in function "public: char * __fastcall TRASReader::GetRasEntries(void (__fastcall*)(char *,char *,char *,char *,char *),bool *)" (?GetRasEntries@TRASReader@@QAIPADP6IXPAD0000@ZPA_ N@Z)
1>Release\usb.exe : fatal error LNK1120: 13 unresolved externals
#pragma comment(lib,"ws2_32.lib")
добавь в начало еще.
эт тож сразу забыл сказать
#pragma comment(lib, "rasapi32")
#pragma comment(lib,"ws2_32.lib")
добавь в начало еще.
Блогадарю , помогло ... теперь количество ошибок уменьшилось ...
1>main.obj : error LNK2019: unresolved external symbol _RasEnumConnectionsA@12 referenced in function "bool __cdecl IsInternetConnected(void)" (?IsInternetConnected@@YA_NXZ)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasEnumEntriesA@20 referenced in function "protected: unsigned long __fastcall TRASReader::GetRasEntryCount(void)" (?GetRasEntryCount@TRASReader@@IAIKXZ)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasGetEntryPropertiesA@24 referenced in function "public: char * __fastcall TRASReader::GetRasEntries(void (__fastcall*)(char *,char *,char *,char *,char *),bool *)" (?GetRasEntries@TRASReader@@QAIPADP6IXPAD0000@ZPA_ N@Z)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasGetEntryDialParamsA@12 referenced in function "public: char * __fastcall TRASReader::GetRasEntries(void (__fastcall*)(char *,char *,char *,char *,char *),bool *)" (?GetRasEntries@TRASReader@@QAIPADP6IXPAD0000@ZPA_ N@Z)
1>Release\usb.exe : fatal error LNK1120: 4 unresolved externals
Вот какие ошибке остались ...
2 Fl0dER: либу Rasapi32.lib подключите еще
Блогадарю , помогло ... теперь количество ошибок уменьшилось ...
1>main.obj : error LNK2019: unresolved external symbol _RasEnumConnectionsA@12 referenced in function "bool __cdecl IsInternetConnected(void)" (?IsInternetConnected@@YA_NXZ)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasEnumEntriesA@20 referenced in function "protected: unsigned long __fastcall TRASReader::GetRasEntryCount(void)" (?GetRasEntryCount@TRASReader@@IAIKXZ)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasGetEntryPropertiesA@24 referenced in function "public: char * __fastcall TRASReader::GetRasEntries(void (__fastcall*)(char *,char *,char *,char *,char *),bool *)" (?GetRasEntries@TRASReader@@QAIPADP6IXPAD0000@ZPA_ N@Z)
1>RASreader.obj : error LNK2019: unresolved external symbol _RasGetEntryDialParamsA@12 referenced in function "public: char * __fastcall TRASReader::GetRasEntries(void (__fastcall*)(char *,char *,char *,char *,char *),bool *)" (?GetRasEntries@TRASReader@@QAIPADP6IXPAD0000@ZPA_ N@Z)
1>Release\usb.exe : fatal error LNK1120: 4 unresolved externals
Вот какие ошибке остались ...
Когда возникают подобные проблемы ,то копируем название ф-ции на которую ругается линковщик и иде на msdn.microsoft.com/en-us/default.aspx Там вбиваем его в поиск и по его результатам становится видно какую либу нужно подключать.
Пробую писать троя )). Приходит строка на сервер. Пытаюсь обработать с помощью ShellExecuteA(NULL, "open", "cmd.exe", buf_command, NULL, SW_HIDE). Выдаёт ошибку error C2664: 'ShellExecuteW' : cannot convert parameter 2 from 'const char [5]' to 'LPCWSTR'. И ещё мне нужно назад послать вывод cmd клиенту. Кроме как записать в файл, потом копировать с него в буфер и отправлять ничё больше не умею. Ну типа system(ipconfig > 1). Но это ламерский способ :(
Пробую писать троя )). Приходит строка на сервер. Пытаюсь обработать с помощью ShellExecuteA(NULL, "open", "cmd.exe", buf_command, NULL, SW_HIDE). Выдаёт ошибку error C2664: 'ShellExecuteW' : cannot convert parameter 2 from 'const char [5]' to 'LPCWSTR'. И ещё мне нужно назад послать вывод cmd клиенту. Кроме как записать в файл, потом копировать с него в буфер и отправлять ничё больше не умею. Ну типа system(ipconfig > 1). Но это ламерский способ :(
ShellExecuteA(NULL, L"open", "cmd.exe", buf_command, NULL, SW_HIDE)
Или
ShellExecuteA(NULL, TEXT("open"), "cmd.exe", buf_command, NULL, SW_HIDE)
У меня вопрос
Каким оброзом можно совершить проверку на возможность записи на диск ?
Или как отлючит в VC++ показ ошибок , о том что невозможно произвести запись ...
У меня есть mp3 плеер при подключении его по usb кабелю появляются 2 сьемных диска, один из каторых внутрения память , а другой подключенная к нему карта памяти ( а так как ее нет в плеере , хоть она и появляется в системе в виде 2 сьемного диска) невозможно открыть и записать на этот якобы сьемный диск , при попытке записи появляется ошибка с заголовком Windows - Диск Отсутствует , так вот мне и надо зделать проверку на возможность записи на какой либо диск ...
Пробуй CreateFile создавать файл если ничего не выйдет то значит запись запрещена или что то такое.(-1 возвр при неудачном создании)
если есть у кого такие хедеры скиньте плз
stdlib.h
malloc.h
memory.h
tchar.h
stdio.h
tchar.h
conio.h
невозможно открыть и записать на этот якобы сьемный диск , при попытке записи появляется ошибка с заголовком Windows - Диск Отсутствует
SetErrorMode(SEM_NOOPENFILEERRORBOX);
SetErrorMode(SEM_NOOPENFILEERRORBOX);
Заюзал , но ошибка всеравно выскакивает ...
Пробуй CreateFile создавать файл если ничего не выйдет то значит запись запрещена или что то такое.(-1 возвр при неудачном создании)
Погуглил все примеры с этой функцией не на создание а на чтение файла .
Заюзал , но ошибка всеравно выскакивает ...
попробуй еще SEM_FAILCRITICALERRORS
попробуй еще SEM_FAILCRITICALERRORS
Перед тем как вы написали , я уже нашол в гугле , но все равно спасибо !!!
если есть у кого такие хедеры скиньте плз
stdlib.h
malloc.h
memory.h
tchar.h
stdio.h
tchar.h
conio.h
Все эти хейдеры идут в комплекте с Dev C++ если я не ошибаюсь , сам пакет Dev C++ не очень большой , и вы можете все недостающие компоненты взять отуда .
У меня вопросик , как можно зделать проверку на активность интернета , а также рассоединения активного подключения ?
POS_troi
10.02.2009, 12:43
Для отключения первой найденной Ras-connection:
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
namespace RAS
{
class Program
{
[DllImport("rasapi32.dll", SetLastError=true)]
static extern uint RasHangUp(IntPtr hRasConn);
const int MAX_PATH = 260;
const int RAS_MaxDeviceType = 16;
const int RAS_MaxEntryName = 256;
const int RAS_MaxDeviceName = 128;
const int RAS_MaxPhoneNumber = 128;
[DllImport("RASAPI32", SetLastError = true, CharSet = CharSet.Auto)]
static extern int RasEnumConnections(
[In, Out] RASCONN[] lprasconn,
ref int lpcb,
ref int lpcConnections);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct RASCONN
{
public int dwSize;
public IntPtr hrasconn;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxEntryName + 1)]
public string szEntryName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxDeviceType + 1)]
public string szDeviceType;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxDeviceName + 1)]
public string szDeviceName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
public string szPhonebook;
public int dwSubEntry;
}
static void Main(string[] args)
{
int conns = 0;
RASCONN[] ras = new RASCONN[256];
ras.Initialize();
ras[0].dwSize = Marshal.SizeOf(typeof(RASCONN));
int lr = ras[0].dwSize * ras.Length;
int ret = RasEnumConnections(ras, ref lr, ref conns);
RasHangUp(ras[0].hrasconn);
}
}
}
И соединение и разрыв.
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
[DllImport("Wininet.dll")]
private static extern Int32 InternetDial(
IntPtr hwndParent,
string lpszConnectoid,
Int32 dwFlags,
ref Int32 lpdwConnection,
Int32 dwReserved);
const int MAX_PATH = 260;
const int RAS_MaxEntryName = 256;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct RASENTRYNAME
{
public int dwSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxEntryName + 1)]
public string szEntryName;
public int dwFlags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH + 1)]
public string szPhonebook;
}
[DllImport("rasapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern uint RasEnumEntries(IntPtr reserved, IntPtr lpszPhonebook,
[In, Out] RASENTRYNAME[] lprasentryname, ref int lpcb, ref int lpcEntries);
[DllImport("wininet.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool InternetCloseHandle(
IntPtr hInternet
);
[DllImport("wininet.dll", SetLastError = true)]
static extern int InternetHangUp(
int Connection,
int ReservedValue
);
static void Main(string[] args)
{
// все соединения
//int cb = Marshal.SizeOf(typeof(RASENTRYNAME)), entries = 0;
//RASENTRYNAME[] entryNames = new RASENTRYNAME[1];
//entryNames[0].dwSize = Marshal.SizeOf(typeof(RASENTRYNAME));
////Get entry number
//uint nRet = RasEnumEntries(IntPtr.Zero, IntPtr.Zero, entryNames, ref cb, ref entries);
//if (entries == 0) return;
//string[] _EntryNames = new string[entries];
//entryNames = new RASENTRYNAME[entries];
//for (int i = 0; i < entries; i++)
//{
// entryNames[i].dwSize = Marshal.SizeOf(typeof(RASENTRYNAME));
//}
//nRet = RasEnumEntries(IntPtr.Zero, IntPtr.Zero, entryNames, ref cb, ref entries);
//for (int i = 0; i < entries; i++)
//{
// _EntryNames[i] = entryNames[i].szEntryName;
// Console.WriteLine(_EntryNames[i]);
//}
//Console.ReadKey();
//return;
/// вызов соединения по модему
Int32 nConnection = new int();
int nResult = InternetDial(
IntPtr.Zero,
"beeline",
(int)InternetDialFlags.INTERNET_DIAL_UNATTENDED, ref nConnection, 0);
Console.WriteLine(nResult.ToString());
Console.WriteLine(nConnection.ToString());
Console.WriteLine("press a key");
Console.ReadKey();
Console.WriteLine(InternetHangUp(nConnection, 0));
Console.WriteLine("should be closed");
}
}
[Flags]
enum InternetConnectionState : int
{
INTERNET_CONNECTION_MODEM = 0x1,
INTERNET_CONNECTION_LAN = 0x2,
INTERNET_CONNECTION_PROXY = 0x4,
INTERNET_RAS_INSTALLED = 0x10,
INTERNET_CONNECTION_OFFLINE = 0x20,
INTERNET_CONNECTION_CONFIGURED = 0x40
}
[Flags]
enum InternetDialFlags
{
INTERNET_DIAL_FORCE_PROMPT = 0x2000,
INTERNET_DIAL_SHOW_OFFLINE = 0x4000,
INTERNET_DIAL_UNATTENDED = 0x8000
}
}
по теме
http://msdn.microsoft.com/en-us/library/aa365943.aspx
http://msdn.microsoft.com/en-us/library/aa366842(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa366836(VS.85).aspx
InternetGetConnectedState - для проверки попробуй эту.
InternetGetConnectedState - для проверки попробуй эту.
Не как немогу заюзать , почти все примеры работают не коректо , так как зачитывают LAN соединения ...
Как можно узнать подключен компьютер к сети интернет , чтобы подключения LAN'a не считывалось ?
Для отключения первой найденной Ras-connection:
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
namespace RAS
{
class Program
{
[DllImport("rasapi32.dll", SetLastError=true)]
static extern uint RasHangUp(IntPtr hRasConn);
const int MAX_PATH = 260;
const int RAS_MaxDeviceType = 16;
const int RAS_MaxEntryName = 256;
const int RAS_MaxDeviceName = 128;
const int RAS_MaxPhoneNumber = 128;
[DllImport("RASAPI32", SetLastError = true, CharSet = CharSet.Auto)]
static extern int RasEnumConnections(
[In, Out] RASCONN[] lprasconn,
ref int lpcb,
ref int lpcConnections);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct RASCONN
{
public int dwSize;
public IntPtr hrasconn;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxEntryName + 1)]
public string szEntryName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxDeviceType + 1)]
public string szDeviceType;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxDeviceName + 1)]
public string szDeviceName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
public string szPhonebook;
public int dwSubEntry;
}
static void Main(string[] args)
{
int conns = 0;
RASCONN[] ras = new RASCONN[256];
ras.Initialize();
ras[0].dwSize = Marshal.SizeOf(typeof(RASCONN));
int lr = ras[0].dwSize * ras.Length;
int ret = RasEnumConnections(ras, ref lr, ref conns);
RasHangUp(ras[0].hrasconn);
}
}
}
И соединение и разрыв.
using System;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
[DllImport("Wininet.dll")]
private static extern Int32 InternetDial(
IntPtr hwndParent,
string lpszConnectoid,
Int32 dwFlags,
ref Int32 lpdwConnection,
Int32 dwReserved);
const int MAX_PATH = 260;
const int RAS_MaxEntryName = 256;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
struct RASENTRYNAME
{
public int dwSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxEntryName + 1)]
public string szEntryName;
public int dwFlags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH + 1)]
public string szPhonebook;
}
[DllImport("rasapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern uint RasEnumEntries(IntPtr reserved, IntPtr lpszPhonebook,
[In, Out] RASENTRYNAME[] lprasentryname, ref int lpcb, ref int lpcEntries);
[DllImport("wininet.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool InternetCloseHandle(
IntPtr hInternet
);
[DllImport("wininet.dll", SetLastError = true)]
static extern int InternetHangUp(
int Connection,
int ReservedValue
);
static void Main(string[] args)
{
// все соединения
//int cb = Marshal.SizeOf(typeof(RASENTRYNAME)), entries = 0;
//RASENTRYNAME[] entryNames = new RASENTRYNAME[1];
//entryNames[0].dwSize = Marshal.SizeOf(typeof(RASENTRYNAME));
////Get entry number
//uint nRet = RasEnumEntries(IntPtr.Zero, IntPtr.Zero, entryNames, ref cb, ref entries);
//if (entries == 0) return;
//string[] _EntryNames = new string[entries];
//entryNames = new RASENTRYNAME[entries];
//for (int i = 0; i < entries; i++)
//{
// entryNames[i].dwSize = Marshal.SizeOf(typeof(RASENTRYNAME));
//}
//nRet = RasEnumEntries(IntPtr.Zero, IntPtr.Zero, entryNames, ref cb, ref entries);
//for (int i = 0; i < entries; i++)
//{
// _EntryNames[i] = entryNames[i].szEntryName;
// Console.WriteLine(_EntryNames[i]);
//}
//Console.ReadKey();
//return;
/// вызов соединения по модему
Int32 nConnection = new int();
int nResult = InternetDial(
IntPtr.Zero,
"beeline",
(int)InternetDialFlags.INTERNET_DIAL_UNATTENDED, ref nConnection, 0);
Console.WriteLine(nResult.ToString());
Console.WriteLine(nConnection.ToString());
Console.WriteLine("press a key");
Console.ReadKey();
Console.WriteLine(InternetHangUp(nConnection, 0));
Console.WriteLine("should be closed");
}
}
[Flags]
enum InternetConnectionState : int
{
INTERNET_CONNECTION_MODEM = 0x1,
INTERNET_CONNECTION_LAN = 0x2,
INTERNET_CONNECTION_PROXY = 0x4,
INTERNET_RAS_INSTALLED = 0x10,
INTERNET_CONNECTION_OFFLINE = 0x20,
INTERNET_CONNECTION_CONFIGURED = 0x40
}
[Flags]
enum InternetDialFlags
{
INTERNET_DIAL_FORCE_PROMPT = 0x2000,
INTERNET_DIAL_SHOW_OFFLINE = 0x4000,
INTERNET_DIAL_UNATTENDED = 0x8000
}
}
по теме
http://msdn.microsoft.com/en-us/library/aa365943.aspx
http://msdn.microsoft.com/en-us/library/aa366842(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa366836(VS.85).aspx
некак не разберусь с кодом , мнебы только проверку на активность интернета =/
ну не знаю у меня для подключение к интернету используется PPPoE соединение и таким кодом
#include <windows.h>
#include <stdio.h>
#include <wininet.h>
#pragma comment(lib,"wininet.lib");
int main()
{
DWORD dw;
if (InternetGetConnectedState(&dw,0))
{
if ((dw & INTERNET_CONNECTION_MODEM)==INTERNET_CONNECTION_MO DEM)
{
printf("Good");
}
}
return 0;
}
Все проверяется как надо. Если есть возможность проверь с разными видами подкл.А вообще если ничего не подходит то просто пробуй делать коннект к какому нибудь интернет серваку если не выходит значит нету соединения или какие то иные проблемы.
//#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char *argv[])
{
ofstream file;
file.open("hello_or1.txt",ios::app);
file.close();
system("PAUSE");
return EXIT_SUCCESS;
}
как тут можно функцию прописать xcopy не отрываясь и типо чтоб на мой хостинг отослал этот файл hello_or1.txt ,значит так открываем, копируем и отсылаем это мне надо как можно тут сделать ?
мож для ссылки вот такую функцию добавить ShellExecute(NULL, "open", "http://www.xosting.ru/login.php/",
NULL, NULL, SW_SHOWNORMAL);просто не могу все в месте сложить,,если что не правильно то подскажите плз.
Отсылай через сокеты или curl, еще вроде есть winhttp/wininet, в последнем это вобще будет одна строка.
При попытки союзать в VC++ wininet.h
1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(58) : error C2146: syntax error : missing ';' before identifier 'HINTERNET' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(58) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(58) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(59) : error C2143: syntax error : missing ';' before '*' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(59) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(59) : error C2378: 'HINTERNET' : redefinition; symbol cannot be overloaded with a typedef 1> C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(58) : see declaration of 'HINTERNET' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(59) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(61) : error C2146: syntax error : missing ';' before identifier 'INTERNET_PORT' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(61) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(61) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(62) : error C2143: syntax error : missing ';' before '*' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(62) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(62) : error C2378: 'INTERNET_PORT' : redefinition; symbol cannot be overloaded with a typedef 1> C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(61) : see declaration of 'INTERNET_PORT' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(62) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(311) : error C2146: syntax error : missing ';' before identifier 'dwResult' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(311) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(311) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(317) : error C2146: syntax error : missing ';' before identifier 'dwError' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(317) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(317) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(326) : error C2146: syntax error : missing ';' before identifier 'Socket' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(326) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(326) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(327) : error C2146: syntax error : missing ';' before identifier 'SourcePort' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(327) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(327) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(328) : error C2146: syntax error : missing ';' before identifier 'DestPort' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(328) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(328) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(329) : error C2146: syntax error : missing ';' before identifier 'Flags' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(329) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(329) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(353) : error C2146: syntax error : missing ';' before identifier 'dwAccessType' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(353) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(353) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(359) : error C2146: syntax error : missing ';' before identifier 'lpszProxy' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(359) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(359) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(365) : error C2146: syntax error : missing ';' before identifier 'lpszProxyBypass' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(365) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(365) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(377) : error C2146: syntax error : missing ';' before identifier 'dwOption' 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(377) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(377) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\wininet.h(379) : error C2146: syntax error : missing ';' before identifier 'dwValue' .....................................
Как я понял из за того что wininet на C , где в настройках проэкта подправить чтобы VC++ мог заюзать хейдер C ?
Все разобрался ;)
Недавно форуме видел код коменты линкера VC++ с помощью него уменьшается вес программ из 32кб консольной проги в 0.5 кб , вот только не помню где ... Мож кто знает ?
Недавно форуме видел код коменты линкера VC++ с помощью него уменьшается вес программ из 32кб консольной проги в 0.5 кб , вот только не помню где ... Мож кто знает ?
_ttp://www.cyberguru.ru/programming/win32/small-win32-applications.html
BlackSilver
11.02.2009, 10:57
Как на WinAPI замутить TreeView с несколькими колонками?
ws2_32.lib плз кто подскажет где скачать можно
скачай dev c++ или студию. отдельно они не валяются.
POS_troi
11.02.2009, 20:31
ws2_32.lib
http://rapidshare.com/files/196838894/ws2_32.lib.html
Хотел заюзать str.find в BCB++ но вот какая трабла
сам код
String str = "superpuperdata";
String str2 = ("data");
size_t found;
found=str.find(str2);
if (found!=string::npos)
{
}
Ошибка
[BCC32 Error] Unit1.cpp(48): E2316 'find' is not a member of 'AnsiString'
Если не решиш проблему вот когда то писал
int FindString(char *str1,char *str2)
{
int nstr1,nstr2,i,j,nstr,sstr;
nstr1=strlen(str1);
nstr2=strlen(str2);
if(nstr1>nstr2)
{
nstr=nstr1-nstr2;
for(i=0;i<nstr;i++)
{
sstr=0;
for(j=0;j<nstr2;j++)
{
if(str1[j+i]==str2[j])
{
sstr++;
}
}
if(sstr==nstr2)
{
return 1;
}
}
}
else
{
return -1;
}
return 0;
}
если нужна позиция то переделать не сложно будет
а в AnsiString она есть?
может стандартный string просто будешь юзать?
спасибо за ws2_32.lib пригодилась,скиньте плз кто-нить где можно про диалоговые окна почитать и еще чтоб стакими функциями как выводить радио-бутоны или типо этого hButton = CreateWindow( "button", (кнопки нужны в окне) и как поисковикe для url в форточке прописать скиньте что-нить про окна.
ToniKapuchon
12.02.2009, 00:59
ганеев или румянцева тебе в помощь! программирование пользовательского интерфейса вроде так книжка называется)
Какой способ синхронизации потоков берущих данные из одной глобальной переменной будет менее затратным по отношению к нагрузке на процессор.Крит.секции или мьютексы?
да там не только Ганеев там их не счесть вот адресочек кому мож пригодится http://shop.bambook.com/scripts/pos.showitem?v=1&ite=80367
2)а вот хотел еще спросить джойнер или крипторы на с++ пишут или луче на асамблере их писать.
void funk(char * pStr,char cByte)
{
__asm{
push eax;
push edi;
push esi;
xor edi,edi;
xor esi,esi;
xor eax,eax;
add eax,2;
mov edi,pStr
mov esi,cByte;
rep movs;
pop esi;
pop edi;
pop eax;
}
}
Есть такая функция, принимает указатель на строку и чар символ. Нужно что-бы символ скопирывало в конец строки... При выполнении копирывания "rep movs" происходит ошибка. Может кто-нибудь подскажет что не так?
void funk(char * pStr,char cByte)
{
__asm{
push eax;
push edi;
push esi;
xor edi,edi;
xor esi,esi;
xor eax,eax;
add eax,2;
mov edi,pStr
mov esi,cByte;
rep movs;
pop esi;
pop edi;
pop eax;
}
}
Есть такая функция, принимает указатель на строку и чар символ. Нужно что-бы символ скопирывало в конец строки... При выполнении копирывания "rep movs" происходит ошибка. Может кто-нибудь подскажет что не так?
--------------------------------------
Есть такая функция, принимает указатель на строку и чар символ. Нужно что-бы символ скопирывало в конец строки... При выполнении копирывания "rep movs" происходит ошибка. Может кто-нибудь подскажет что не так?
зачем использовать асм вставки когда в Си это можно написать?
rep movs
а где аргументы?
mov esi,cByte;
и тут я думаю он не даст засунуть в регистр значение
зачем использовать асм вставки когда в Си это можно написать?
На Си не получилось, можеш подсказать как? буду благодарен) (без memcpy,sprintf и тд.)
ща асма нету под рукой
попробуй указатель на вторую строку использовать
lea esi,cByte;
rep movs
а где аргументы?
mov esi,cByte;
и тут я думаю он не даст засунуть в регистр значение
rep movs - по умолчанию берет edi, esi как аргументы.
ща асма нету под рукой
попробуй указатель на вторую строку использовать
lea esi,cByte;
mov esi,cByte; тоже работает отлично.... проблема либо с mov edi,pStr либо всетаки с rep movs;
LEA DI, STRING2 ; адрес "куда"
LEA SI, STRING1 ; адрес "откуда"
REP MOVSB ; переслать данные
думаю все таки нужно адрес второй строки а не сама строка
void funk(char * pStr,char cByte)
{
while(pStr[0]!=0)pStr++;
pStr[0]=cByte;
}
Вопрос к пользователям Borland C++ Builder 6
---
Где найти примеры использования IdHTTP. (Юзал поиск находил только для Дельфи)
---
Выложите плиз пример авторизации на вконтакте.ру
из за чего такое может возникать?
Run-Time Check Failure #2 - Stack around the variable 'out' was corrupted.
вылетает при выходе из функции. видимо что то с адресом возврата происходит в стеке. непойму что сделать можно.
Проблему решил. нужно было динамически массив out выделять.
Перекомпилил своего черьвя с BCB++ в VC++ скомпиленый на Студии 12кб , но опять же возникла проблема запуском на другом компе , норыл инфу про параметр /MT , на другом компе стала работат но вес также как и у BCB++ увеличилсо до 89кб . Просто я видел трой на BCB++ автор говорил 11кб чистого веса EXE* вот я непойму как он добился такого веса О_о ?!
Перекомпилил своего черьвя с BCB++ в VC++ скомпиленый на Студии 12кб , но опять же возникла проблема запуском на другом компе , норыл инфу про параметр /MT , на другом компе стала работат но вес также как и у BCB++ увеличилсо до 89кб . Просто я видел трой на BCB++ автор говорил 11кб чистого веса EXE* вот я непойму как он добился такого веса О_о ?!
В Visual Studio есть опция "Build -> Configuration Manager" в ней можно выбрать тип компиляции:
Debug - больше весит на проще следить за ошибками;
Release - занимает намного меньше, его используй когда уверен на 100% работоспособности проги.
В Visual Studio есть опция "Build -> Configuration Manager" в ней можно выбрать тип компиляции:
Debug - больше весит на проще следить за ошибками;
Release - занимает намного меньше, его используй когда уверен на 100% работоспособности проги.
Дело в том что я и так юзаю Release , но прога не работала на других компах , после этого в настройках проэкта в CodeGeneration поставил Runtime Libary = /mt стала работать, но и вес вырос с 12-до-90кб .
Ну помоему это логично, он подцепил в себя библиотеки. А с тебе настройками, что раньше были (когда прога не запускалась на других компах) библиотеки искались в системе. Можешь ради инетереса поставить виртуальную машину и на нее визуал студию и тогда там прога должна запустится.
Ну помоему это логично, он подцепил в себя библиотеки. А с тебе настройками, что раньше были (когда прога не запускалась на других компах) библиотеки искались в системе. Можешь ради инетереса поставить виртуальную машину и на нее визуал студию и тогда там прога должна запустится.
Это я понимаю , но меня мучиет вопрос : про вирус весом 11 кб написаный на C++ , как так ? Если даже Hello World 56кб когда ставлю /mt параметр ибо без него моя проги незапустится там где нет VC++ =|
Это я понимаю , но меня мучиет вопрос : про вирус весом 11 кб написаный на C++ , как так ? Если даже Hello World 56кб когда ставлю /mt параметр ибо без него моя проги незапустится там где нет VC++ =|
не использовать crt.. это malloc printf fopen и тд.
Всем здрасьте)
Возникла проблема =[ можно ли в пользовательской функции сделать ретурн массива,пример:
string test()
{
string names[1];
names[0] = "test";
return names;
}
при таком раскладе пишет ошибку(неверный параметр в ретурне как-то так)
пробовал делать так:
string[] test()
{
string names[1];
names[0] = "test";
return names;
}
и так:
string test()
{
string names[1];
names[0] = "test";
return names[];
}
всеравно пишет ошибку...
Собственно и вопрос как правильно реализовать ретурн массива?
не использовать crt.. это malloc printf fopen и тд.
Я так понял значит и функции sprintf wsprintf и т.д ?
Но какже без них О_о
Я так понял значит и функции sprintf wsprintf и т.д ?
Но какже без них О_о
wsprintf - это и есть замена sprintf..
посмотри в мсдн
А как вобще отключить CRT ?
Компилю
#include <iostream>
using namespace std;
int main()
{
cout << "hello ";
}
и вижу
'Consol.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9 a1e18e3b_9.0.21022.8_x-ww_d08d0375\msvcp90.dll'
'Consol.exe': Loaded 'C:\WINDOWS\WinSxS
\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022 .8_x-ww_d08d0375\msvcr90.dll'
А как вобще отключить CRT ?
Компилю
#include <iostream>
using namespace std;
int main()
{
cout << "hello ";
}
return не забывай прописывать...
int main()
{
cout << "hello ";
return 0;
}
#include "stdafx.h"
#include "windows.h"
#include <iostream>
int main()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
ZeroMemory( &pi, sizeof(pi) );
SECURITY_ATTRIBUTES secat;
secat.nLength = sizeof(SECURITY_ATTRIBUTES);
secat.bInheritHandle = TRUE;
HANDLE newin, writein;
CreatePipe(&newin,&writein,&secat,0);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
si.hStdInput=newin;
GetStartupInfoA(&si);
si.cb;
CreateProcessA(NULL, "cmd.exe", NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
DWORD bytes;
char command[100] = "mkdir 1254655553";
WriteFile(writein, command, 100, &bytes, NULL);
std::cin.get();
}
Уважаемые отцы объясните боту патчему не создаётся папка )
groundhog
16.02.2009, 19:59
Универсальный дебагер тебе в руки:
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
0,
(LPTSTR) &lpMsgBuf,
0,
NULL
);
MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONERROR);
LocalFree(lpMsgBuf);
Вызови этот код после CreatePipe, после CreateProcess и сам всё узнаешь. А вообще для кого придумали обработку ошибок?
groundhog
16.02.2009, 20:05
Это как?
#include <winows.h>
CreateDirectory();
xismyname
17.02.2009, 00:24
Всем здрасьте)
Возникла проблема =[ можно ли в пользовательской функции сделать ретурн массива,пример:
string test()
{
string names[1];
names[0] = "test";
return names;
}
при таком раскладе пишет ошибку(неверный параметр в ретурне как-то так)
пробовал делать так:
string[] test()
{
string names[1];
names[0] = "test";
return names;
}
и так:
string test()
{
string names[1];
names[0] = "test";
return names[];
}
всеравно пишет ошибку...
Собственно и вопрос как правильно реализовать ретурн массива?
А string это случайно не класс ? :)
В C твоя проблема решается так :
char *func(void)
{
char *str = (char*)malloc( sizeof(char) * 16 );
// do something...
// end return pointer to char
return str;
}
В как в C++ не могу точно сказать, но можно по пробовать такой же вариант как в C.
2xismyname, боюсь это не то что я имел ввиду, но все равно спасибо)
Сейчас приведу пример(не рабочий) но покажу хотябы свиду что я имел ввиду...
string test()
{
string data[3];
data[0] = 'Hello1';
data[1] = 'Hello2';
data[2] = 'Hello3';
/*Что-то типо такого и затем эту переменную data вернуть т.е. сделать return*/
return data;//А вот тут пишет ошибку =[
}
попробуй обьявить массив до вызова ф-ции и передавай в ф-цию массив как параметр в ф-цию и возвращять не надо ничё т.к вроде массив этот как указатели ... тоесть имя массива это указатель на первую ячейку последовлольности ячеек памяти (сам не понел чё сказал :D) чёт типо того =)
попробуй обьявить массив до вызова ф-ции и передавай в ф-цию массив как параметр в ф-цию и возвращять не надо ничё т.к вроде массив этот как указатели ... тоесть имя массива это указатель на первую ячейку последовлольности ячеек памяти (сам не понел чё сказал :D) чёт типо того =)
Смысл понял), но не прокатывает... пишет такуюже ошибку =[
c:\users\rudvil\documents\visual studio 2008\projects\learn_arrays\learn_arrays\arrays.cpp (40) : error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it)' : cannot convert parameter 1 from 'std::string [3]' to 'std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Constructor for struct 'std::basic_string<_Elem,_Traits,_Ax>::_Has_debug_it' is declared 'explicit'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
Хм, а это вообще можно делать в C++?...
#include <string>
#include <iostream>
void test(std::string []);
int main()
{
std::string test2[3];
test(test2);
std::cout << test2[2];
return 0;
}
void test(std::string test[])
{
test[0] = "data";
test[1] = "data2";
test[2] = "data3";
}
всё отлично коплится
2Doom123 наигромаднейшее тебе спасибо!!!! :D все работает на ура)))
#include "stdafx.h"
#include "windows.h"
#include <iostream>
int main()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
ZeroMemory( &pi, sizeof(pi) );
SECURITY_ATTRIBUTES secat;
secat.nLength = sizeof(SECURITY_ATTRIBUTES);
secat.bInheritHandle = TRUE;
HANDLE newin, writein;
CreatePipe(&newin,&writein,&secat,0);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
si.hStdInput=newin;
GetStartupInfoA(&si);
si.cb;
CreateProcessA(NULL, "cmd.exe", NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
DWORD bytes;
char command[100] = "mkdir 1254655553";
WriteFile(writein, command, 100, &bytes, NULL);
std::cin.get();
}
Дяди! Патчему папка не создаётся? бот в шоке ))
Как можно обрезать строку типа AnsiString до опредленного символа?
groundhog
17.02.2009, 17:45
#include "stdafx.h"
#include "windows.h"
#include <iostream>
int main()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
ZeroMemory( &pi, sizeof(pi) );
SECURITY_ATTRIBUTES secat;
secat.nLength = sizeof(SECURITY_ATTRIBUTES);
secat.bInheritHandle = TRUE;
HANDLE newin, writein;
CreatePipe(&newin,&writein,&secat,0);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
si.hStdInput=newin;
GetStartupInfoA(&si);
si.cb;
CreateProcessA(NULL, "cmd.exe", NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
DWORD bytes;
char command[100] = "mkdir 1254655553";
WriteFile(writein, command, 100, &bytes, NULL);
std::cin.get();
}
Дяди! Патчему папка не создаётся? бот в шоке ))
Чувак, я тебе дал код. Если тебе в падлу анализировать возвращаемые функцией значения и смотреть на каком шаге возникает ошибка, то используй его после вызова функций CreateProcess, WriteFile и CreatePipe.
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
0,
(LPTSTR) &lpMsgBuf,
0,
NULL
);
MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONERROR);
LocalFree(lpMsgBuf);
На кой хер ты создаёшь директорию через пайпы и CMD? Что чистый WIN API религия не позволяет использовать?
groundhog
17.02.2009, 17:46
Как можно обрезать строку типа AnsiString до опредленного символа?
сделай заданный символ равным терминальному нулю 0x00, например:
...
someAnsiBuf[5] = 0x00;
...
Чувак, я тебе дал код. Если тебе в падлу анализировать возвращаемые функцией значения и смотреть на каком шаге возникает ошибка, то используй его после вызова функций CreateProcess, WriteFile и CreatePipe.
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
0,
(LPTSTR) &lpMsgBuf,
0,
NULL
);
MessageBox(NULL, (LPCTSTR)lpMsgBuf, TEXT("Error"), MB_OK | MB_ICONERROR);
LocalFree(lpMsgBuf);
На кой хер ты создаёшь директорию через пайпы и CMD? Что чистый WIN API религия не позволяет использовать?
Да папку создать это для примера просто. А вообще при WriteFile выдаёт неверный дескриптор. Но я как ты наверно понимаешь как всегда в шоке ))
groundhog
17.02.2009, 18:53
Что после CreatePipe происходит? Какое сообщение?
Что после CreatePipe происходит? Какое сообщение?
"Неверная попытка доступа к адресу памяти" :(
groundhog
17.02.2009, 19:14
secat.nLength = sizeof(SECURITY_ATTRIBUTES);
secat.bInheritHandle = TRUE;
secat.lpSecurityDescriptor = NULL;
Что будет если так?
есть вопрос, типы бывают разные (int, double, float...), вот есть пустой тип void, в функцы все ясно для чего он нужен, а вот для параметрах толку от него какой? на пример:
void x;
void *xPtr;
пустые типы, не берут с памети не чего, а полза какава?
**********
#include <stdio.h>
#include <conio.h>
int main()
{
FILE *FF;
const int MAX=1024;
int x,ch;
char a[MAX];
char FirstFileName[] = {"file1.txt"};
/*printf("Insert text to first file : \n");
FF = fopen(FirstFileName,"w");
gets(a);
fputs(a,FF);
fclose(FF);
printf("\nFirst file data is : \n");
FF = fopen(FirstFileName,"r");
fgets(a,MAX,FF);
printf("%s\n",a);
fclose(FF);*/
printf("Insert text to first file : \n");
FF = fopen(FirstFileName,"w");
gets(a);
fwrite(a,sizeof(char),MAX,FF);
fclose(FF);
printf("\nData in first file : \n");
FF = fopen(FirstFileName,"r");
fread(a,sizeof(char),MAX,FF);
printf("%s\n",a);
fclose(FF);
getch();
return 0;
}
Юзая fputs, и fgets все на ура, вот только юзая fwrite какаи то каляки в файле появляются.
Hello, Welcome to C programming language v$э" рэ эЩяпv0 ‰ °,R R Э ”ь" ‰ R °,R ”ь" рЉуv,‹уvн nv R HR Nv ( HR f dЭ э" HR ё,R јR 2 lR D F јR нv @ @ё#R b f dД R ё,R , ё,R г ·,R І,R і,R R ыјы" ыДя" 4˜нv)ї юяяя,‹уvR‡уv@ H °,R @ яяяя$ЊтvooPv @ 4э" @ pя" @ @ Ђ ”Љтv,Ырvяяяя °#R R §ќ¦nHя" , , R °#R рЉуv? 4ю" зЈуv , ,‹уvMўnv , Њ, H, , , H, ? , H, , ђю" @†уv0, †уvйўnv , , Љ ЉД , ХўnvЁ#, 0, H, Ё#, , H, , H, ? ?? ‰? ? , , \э" , ? ‰ )ї Ё#, ,‹уvR‡уv , H, R‡уv, 0, , ˜°э" h, ью" 4˜нvIї юяяя†уvR†уv , , рR Аю" oЕRv , , я" kќѕv , xќѕvАЇpє рR 4цмМюяяяу¦ѕv;§ѕvФю" Дя" µ$АvLНмМюяяяxќѕv®Ьїv, p, 8я"
что это?? почему так?
ЗЫ. сорри за плохой Русс язык, сам то не с Россий.
secat.nLength = sizeof(SECURITY_ATTRIBUTES);
secat.bInheritHandle = TRUE;
secat.lpSecurityDescriptor = NULL;
Что будет если так?
Теперь все операции успешно завершены, но папка не создалась, печаль... ))
groundhog
17.02.2009, 19:39
void не пустой тип. Он такой же тип как и все другие. Он эквивалентен одновременно всем типам. Просто он "безтиповый". Ты его можешь привести к любому типу. Он часто используется в задачах, когда неизвестно какой тип будет подаваться на входе... Например у тебя функция вывода чего-то... Если ты опишешь параметр как указатель на int, то это и ограничит тебя использованием int в параметрах... А если ты опишешь как указатель на void, то тут флаг тебе в руки - передавать можешь что угодно. Умей только правильно это обработать.
fwrite(a,sizeof(char),strlen(a),FF)
void не пустой тип. Он такой же тип как и все другие. Он эквивалентен одновременно всем типам. Просто он "безтиповый". Ты его можешь привести к любому типу. Он часто используется в задачах, когда неизвестно какой тип будет подаваться на входе... Например у тебя функция вывода чего-то... Если ты опишешь параметр как указатель на int, то это и ограничит тебя использованием int в параметрах... А если ты опишешь как указатель на void, то тут флаг тебе в руки - передавать можешь что угодно. Умей только правильно это обработать.
fwrite(a,sizeof(char),strlen(a),FF)
поняно, спасибо вам.
проблема с fwrite решына...
memset(a,0,sizeof(a));
сделай заданный символ равным терминальному нулю 0x00, например:
...
someAnsiBuf[5] = 0x00;
...
А обязательно нужно определять позицию искомого символла в массиве?
ЗЫ:что то я там ненахожу методов с названиями clear,free и т.д. :( Как же можно очистить буффер символов типа ansistring ?
Unregistered
18.02.2009, 00:53
Что это за программы: InterBase, VisiBroker. Стали вместе с Borland C++ Builder 6 Enterprise. Я смотрел, но ничего внятного для себя в доках не нашел. В универе начался полугодовой курс программирования. Т.е. основы. Так вот для тех целей, для моих целей они нужны?
InterBase : Relational data base management system , то есть управленям базы данных.
VisiBroker : для работы с COBRA
я не спец по Делфи, но тут думаю все ясно что, зачем, почему, и куда.
напишите функцию print_out печатающую все целые числа в диапазоне от 1 до N. проверьте работу функции, поместив её в программу и передав ей число N - введенное с клавиатуры. возвращаемый тип функции print_out должен быть void; функция не возвращает значение.
вот накорябал это
#include "stdafx.h"
#include <iostream>
void print_out (int n);
using namespace std;
int main ()
{
int n ;
cout << "enter number "; cin >> n;
cout << "celye chisla do" << n << "-" << print_out (n) ;
return 0;
}
void print_out (int n)
{
int i;
for ( i=0; i<=n; i++)
cout << i << ", ";
}
и получил ошибку в функции. где ошибка?
groundhog
19.02.2009, 18:43
В ДНК, наверное... Где лог ошибок? :) Если тебе нужны качественно сделанные (НО ПЛАТНЫЕ) лабы - пиши в ПМ или аську. Если ты действительно хочешь разобраться с проблемой - покажи лог ошибок.
В ДНК, наверное... Где лог ошибок? :) Если тебе нужны качественно сделанные (НО ПЛАТНЫЕ) лабы - пиши в ПМ или аську. Если ты действительно хочешь разобраться с проблемой - покажи лог ошибок.
с 25 ошибками разобрался - перепутал << с >> ))
осталась одна большая ошибка, ссылается на функцию
1>Компиляция...
1>stdafx.cpp
1>Компиляция...
1>функция.cpp
1>c:\users\eiti\documents\visual studio 2008\projects\функция\функция\фун кция.cpp(10) : error C2679: бинарный '<<': не найден оператор, принимающий правый операнд типа 'void' (или приемлемое преобразование отсутствует)
1> c:\vc\vc\include\ostream(653): может быть 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\vc\vc\include\ostream(700): или 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)'
1> with
/////////////\вот тут очень большой лог и ачат ругается типа много картинок вставил///////////////
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1>Журнал построения был сохранен в "file://c:\Users\eiti\Documents\Visual Studio 2008\Projects\функция\функция\Debug\ BuildLog.htm"
1>функция - ошибок 1, предупреждений 0
========== Перестроение всех: успешно: 0, с ошибками: 1, пропущено: 0 ==========
groundhog
19.02.2009, 19:09
cout << "celye chisla do" >> n >>"-" >> print_out (n) ;
C какого байта стрелки направо завернуло? :)
C какого байта стрелки направо завернуло? :)
это муки творчества ))
уже 4ый час пытаюсь разобраться. код поправил, теперь ошибка одна. лог ошибки выше
#include <iostream>
using namespace std;
void print_out (int n);
int main ()
{
int n;
cout << "enter number ";
cin >> n;
cout << "celye chisla do" << n << endl;
print_out (n) ;
return 0;
}
void print_out (int n)
{
for (int i=0; i<n; cout << ++i << ", ") ;
}
...
groundhog
19.02.2009, 19:35
Объясню, что написл Slip - cout не перегружен для работы с void-типами, и это нормально, это в логике вещей, нельзя вывести то, чего нет. А твоя функция возвращает void тип, который ты и пытаешься вывести. Следовательно, чтобы убрать эту ошибку нужно вызывать твою функцию вне cout;
2.Slip ты моя радость ))
а в книжке в похожем примере написано что вот так
cout << "celye chisla do" << n << "-" << print_out (n);
одной строкой можно.
спасибо, ты сделал мне мультиоргазм)
2 groundhog отлично объяснил. спасибо
а в книжке в похожем примере написано что вот так
cout << "celye chisla do" << n << "-" << print_out (n);
Можно, если ф-я возвращает какое либо значение (groundhog же написал):
#include <iostream>
using namespace std;
int print_out(int n);
int main ()
{
int n;
cout << "enter number ";
cin >> n;
cout << endl << print_out(n) << endl;
return 0;
}
int print_out(int n)
{
return n*10;
}
Вообще в С++ ф-я может возвращать только одно значение. Если хочешь что бы ф-я изменяла и "возвращала" множество данных в другой области видимости, то указатели/ссылки тебе в помошь.
Подскажите по этому коду, почему невыводится ип подконектившегося клиента?
struct datas
{
SOCKET ss;
SOCKADDR_IN sadr;
};
DWORD WINAPI twins(LPVOID lParam)
{
datas *params=(datas*)lParam;
SOCKET s;s=params->ss;
char *buf=new char[1024];
for(;;)
{
recv(s,buf,1024,0);
Sleep(500);
send(s,buf,strlen(buf),0);
if(strcmp(buf,"exit")==0){break;}
memset(buf,NULL,strlen(buf));
}
delete []buf;
}
int main()
{
DWORD id;
SOCKET sin,sout;WSADATA wsd;
SOCKADDR_IN ladr,cadr;
datas params;
WSAStartup(MAKEWORD(2,0),&wsd);
ladr.sin_family=AF_INET;
ladr.sin_port=htons(250);
ladr.sin_addr.s_addr=0;
sin=socket(AF_INET,SOCK_STREAM,0);
bind(sin,(sockaddr*)&ladr,sizeof(ladr));
for(;;)
{
Sleep(300);
listen(sin,10);
int sz=sizeof(cadr);
sout=accept(sin,(sockaddr*)&cadr,&sz);
params.ss=sout;
params.sadr=cadr;
getpeername(sout,(sockaddr*)&cadr,&sz);
printf("\n",inet_ntoa(cadr.sin_addr));
CreateThread(0,0,&twins,(void*)¶ms,0,&id);
}
//WSACleanup();
}
вопрос такой, как из Си под линукс определить версию ОС? Есть ли какая-то функция?
компилируется GCC
спасибо, но на такое ругается
поступил так system("uname -a >>results.txt")
Блин, ну ты и геморойщик.
Слабо было использовать просто функцию, а не запускать программу, использующую эту функцию?
переделал, просто искал, где она определена,
вобщем, #include <sys/utsname.h>
Еще раз спасибо ;)
groundhog
20.02.2009, 13:19
Подскажите по этому коду, почему невыводится ип подконектившегося клиента?
struct datas
{
SOCKET ss;
SOCKADDR_IN sadr;
};
DWORD WINAPI twins(LPVOID lParam)
{
datas *params=(datas*)lParam;
SOCKET s;s=params->ss;
char *buf=new char[1024];
for(;;)
{
recv(s,buf,1024,0);
Sleep(500);
send(s,buf,strlen(buf),0);
if(strcmp(buf,"exit")==0){break;}
memset(buf,NULL,strlen(buf));
}
delete []buf;
}
int main()
{
DWORD id;
SOCKET sin,sout;WSADATA wsd;
SOCKADDR_IN ladr,cadr;
datas params;
WSAStartup(MAKEWORD(2,0),&wsd);
ladr.sin_family=AF_INET;
ladr.sin_port=htons(250);
ladr.sin_addr.s_addr=0;
sin=socket(AF_INET,SOCK_STREAM,0);
bind(sin,(sockaddr*)&ladr,sizeof(ladr));
for(;;)
{
Sleep(300);
listen(sin,10);
int sz=sizeof(cadr);
sout=accept(sin,(sockaddr*)&cadr,&sz);
params.ss=sout;
params.sadr=cadr;
getpeername(sout,(sockaddr*)&cadr,&sz);
printf("\n",inet_ntoa(cadr.sin_addr));
CreateThread(0,0,&twins,(void*)¶ms,0,&id);
}
//WSACleanup();
}
printf("\n",inet_ntoa(cadr.sin_addr));
А куда делся спецификатор типа вывода в printf?
Недавно занялся C++(совсем недавно), и сегодня попытался написать обычную работу с сокетами - открытие порта и его прослушиваение. Подключил winsock2.h, вроде сделал все как нужно, но на вызове функции socket компилятор выдаёт ошибку.
1>------ Build started: Project: test, Configuration: Debug Win32 ------
1>Compiling...
1>test.cpp
1>Linking...
1>test.obj : error LNK2028: unresolved token (0A00000F) "extern "C" unsigned int __stdcall socket(int,int,int)" (?socket@@$$J212YGIHHH@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
1>test.obj : error LNK2028: unresolved token (0A000010) "extern "C" int __stdcall WSAStartup(unsigned short,struct WSAData *)" (?WSAStartup@@$$J18YGHGPAUWSAData@@@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
1>test.obj : error LNK2019: unresolved external symbol "extern "C" unsigned int __stdcall socket(int,int,int)" (?socket@@$$J212YGIHHH@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
1>test.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall WSAStartup(unsigned short,struct WSAData *)" (?WSAStartup@@$$J18YGHGPAUWSAData@@@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)
1>C:\Projects\test\Debug\test.exe : fatal error LNK1120: 4 unresolved externals
1>Build log was saved at "file://c:\Projects\test\test\Debug\BuildLog.htm"
1>test - 5 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
А вот сам исходник.
#include "stdafx.h"
#include "Form1.h"
#include "winsock2.h"
using namespace test;
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
WSADATA wsaData;
SOCKET s;
WSAStartup(MAKEWORD(2,2), &wsaData);
s = socket(AF_INET,SOCK_STREAM,0);
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(fal se);
// Create the main window and run it
Application::Run(gcnew Form1());
return 0;
}
Помогите пожалуйста разобраться.
Итак попытка номер пять ). Патчему вывод из смд не перенаправляется? Паапки! Куку )
#include "stdafx.h"
#include "windows.h"
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#pragma hdrstop
int main()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
ZeroMemory( &pi, sizeof(pi) );
SECURITY_ATTRIBUTES secat;
secat.nLength = sizeof(SECURITY_ATTRIBUTES);
secat.bInheritHandle = TRUE;
secat.lpSecurityDescriptor = NULL;
HANDLE read_stdout,newstdout;
CreatePipe(&read_stdout,&newstdout,&secat,0)
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdOutput=newstdout;
//si.cb;
GetStartupInfoA(&si);
CreateProcessA("C:\\WINDOWS\\system32\\cmd.exe", " /k dir", NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
DWORD bytes; //кол-во прочитанных байт
DWORD avail; //кол-во доступных байт
char buf[1023];
PeekNamedPipe(read_stdout, buf, 1023, &bytes, &avail, NULL);
ReadFile(read_stdout, buf, 1023, &avail, NULL);
std::cout << buf;
std::cin.get();
}
Unregistered
20.02.2009, 16:39
Объясниет на пальцах как в 6м Борланд Билдере определять количесво памяти и делать консольные приложения не привязаные к либам на данном кампутере? С синтаксисом я там буду сам уже ковырять, пока самое начало.
Unregistered
20.02.2009, 17:20
woohoo! Hello world!
Понял ошибку. Не добавил
#pragma comment( lib, "wsock32.lib" )
Как конвертировать массив char в тип String?
массив могу создавать или так
char buf[1024];
или так
char *buf = new char[1024];
Как конвертировать массив char в тип String?
массив могу создавать или так
char buf[1024];
или так
char *buf = new char[1024];
Если не ошибаюсь то все очень просто.
char buf[1024];
или так
char *buf = new char[1024];
string test = buf;
или так:
char buff[]="Hello word!";
string str(buff);
можно как-то, никак не изменяя память процесса, определить адреса его api-функций на свой выбор?
при тех двух способах которые Вы предложили выскакивает ошибка
cannot convert from 'char [1024]' to 'System::String ^'
а если я указываю string с маленькой буквы то вот такая ошибка:
'string' : undeclared identifier
Пробовал в инклудах писать "#include <string>", но не помогло.
jawbreaker
22.02.2009, 12:52
Kuzya
Попробуй так:
char*p="test string...";
System::String *str(p);
или так:
const char* charstr = "Hello, world!";
String^ clistr = gcnew String(charstr);
Console::WriteLine(clistr);
string и System::String это разные типы!
при тех двух способах которые Вы предложили выскакивает ошибка
а если я указываю string с маленькой буквы то вот такая ошибка:
'string' : undeclared identifier
Пробовал в инклудах писать "#include <string>", но не помогло.
Для string нужно прописывать std; т.е. std::string test = "content";
или же прописать
using namespace std;
Exile1985
22.02.2009, 21:17
Как поместить строку на место первой записи в файле. При этом, запись ранее занимавшая первую позицию, помещается на вторую, вторая запись на третью, и т. д.
Есть вариант с чтением содержимого 1-го файла в буфер, создание нового 2-го файла с добавлением нужно строки в его начало и последующим добавлением содержимого из 1-го файла.
Вопрос в следующем: есть какой не будь еще вариант?
Ну допустим что 1-й файл весит 100 метро, строка которую нужно добавить длинной 40 символов, не не ворочать же 100 метров 2 раза (четение/перезапись) из за этой строки?
запись в начало файла строки+"\r\n"
modeller85
22.02.2009, 22:44
Доброго времени суток! Прошу помощи: хочу написать программу на С, ( или С++), которая открывала блокнот, или скажем запускала калькулятор, помогите пожалуйста.
Exile1985
22.02.2009, 22:59
Доброго времени суток! Прошу помощи: хочу написать программу на С, ( или С++), которая открывала блокнот, или скажем запускала калькулятор, помогите пожалуйста.
STARTUPINFO si;
static PROCESS_INFORMATION pi;
BOOL success;
success = CreateProcess( NULL, "calc.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
if (!success) MessageBox(hWnd, "Error of create Process", NULL, MB_OK);
Прописал использование пространства имён std. И попробовал объявлять вот так "std::string...." Пишет ошибку: "'std' : a namespace with this name does not exist"
Прописал использование пространства имён std. И попробовал объявлять вот так "std::string...." Пишет ошибку: "'std' : a namespace with this name does not exist"
значит нету такой библиотеки...
Как можно прочитать из числа "241292123" пятую цыфру по счету тоесть "9" ?
ToniKapuchon
24.02.2009, 18:29
какой файл, текстовый или бинарный?
SetFilePointer(hFile, 4, NULL, FILE_BEGIN);
и читаешь один байт ReadFile()
какой файл, текстовый или бинарный?
SetFilePointer(hFile, 4, NULL, FILE_BEGIN);
и читаешь один байт ReadFile()
у меня к примеру данное число уже находится в переменой int
Преобразуй в строку потом бери 5 эллемент и обратно в число. это самый простой способ.
или еще вариант
Делиш на 10000 береш целую часть потом делиш на 10 и береш дробную часть.
Преобразуй в строку потом бери 5 эллемент и обратно в число. это самый простой способ.
или еще вариант
Делиш на 10000 береш целую часть потом делиш на 10 и береш дробную часть.
О можете оформить ввиде C++ кода а то я нечего не понял ... Может вы меня и не правельно поняли к примеру у меня есть текст Krokodil мне надо прочитать 6 букву по счету = "d"
AnOcToJI
24.02.2009, 19:21
Народ скажите точно? что(какие библиотеки) отключить в C++ 2009 что бы проги шли на компах без C++
Срочно, заранее спс)
Народ скажите точно? что(какие библиотеки) отключить в C++ 2009 что бы проги шли на компах без C++
Срочно, заранее спс)
Что именно вы используете ? VC++ 2009 ? или Borland C++ 2009 ?
AnOcToJI
24.02.2009, 19:39
Что именно вы используете ? VC++ 2009 ? или Borland C++ 2009 ?
Borland C++ 2009
убираем галку Project>Option>Linker>Linking>Dunamic RTL и Project>Option>Packages>Build with runtime packages
О можете оформить ввиде C++ кода а то я нечего не понял ... Может вы меня и не правельно поняли к примеру у меня есть текст Krokodil мне надо прочитать 6 букву по счету = "d"
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string a = "Krokodil";
cout << a.substr(5, 1) << endl;
return 0;
}
Где 5 - это позиция(начиная с нуля), где 1 - это длина(начиная с указанной позиции т.е. показываем только 1 символ,если написать 2 то результат будет "di")
З.Ы.
А если это был char то так:
#include <iostream>
using namespace std;
int main ()
{
char a[] = "Krokodil";
cout << a[5] << endl;
return 0;
}
AnOcToJI
24.02.2009, 20:30
блин объясните что за фигатень
появляется неожиданно и прога не запускается больше...
[BCC32 Warning] UnitLib.h(156): W8004 'rowtab' is assigned a value that is never used
[BCC32 Warning] UnitLib.h(156): W8004 'rowtab' is assigned a value that is never used
[BCC32 Warning] UnitLib.h(156): W8004 'rowtab' is assigned a value that is never used
[BCC32 Warning] UnitLib.h(156): W8004 'rowtab' is assigned a value that is never used
[BCC32 Warning] UnitLib.h(156): W8004 'rowtab' is assigned a value that is never used
[ILINK32 Error] Error: Unresolved external 'Td::Show()' referenced from D:\C\2.02.09\XZ\1\КОПИЯ КОПИЯ ЛАБОРАТОРНАЯ РАБОТА №4\RELEASE\UNITMAIN.OBJ
[ILINK32 Error] Error: Unresolved external '__fastcall Outline::TCustomOutline::~TCustomOutline()' referenced from C:\PROGRAM FILES\CODEGEAR\RAD STUDIO\6.0\LIB\BCBSMP.LIB|cdiroutl.cpp
........................
О можете оформить ввиде C++ кода а то я нечего не понял ... Может вы меня и не правельно поняли к примеру у меня есть текст Krokodil мне надо прочитать 6 букву по счету = "d"
Ты говорил входные данные int.ну лан.
вообщем если со строкой то
char a[]="asdfghjk";
printf("%c",a[2]);
если с числом то
int len;
int i = 123456789;
char buff[10];
itoa (i,buff,10);
len = strlen(buff);
printf("%c",buff[len-3]); //получим 6
если нужно только число на выходе то так можно еще
int i = 123456789; //допустим мне надо 6
int out;
i = i/1000;
out = i%10;
printf("%i",out);
пс: писал из головы не проверял но по идее все должно почти работать.
Возможно ли в С++ динамически объявлять размер string массива.
не так как обычно:
string test[15];
так тоже не подходит:
#define size 15
string test[size];
,а вот так (у меня при этом вылезает ошибка)
int size = 15;
string test[size];
и тут такая же ошибка..
int size = 15;
#define len size
string test[len];
С меня + :)
нельзя... размеры должны быть константами... string это не труЪ
вектора символов тебе в помощь #include <vector>
Народ помогите ... Вобщем у меня в переменой int значение 6ти значное число к примеру 321321 мне надо записать каждую цыфру в переменые a b c x y z тоесть так
a = 3 , b = 2 , c = 1, x = 3 , y = 2 , z =1
Помогите
Ребят, скажите плиз что значит rand()%365? :)
случайное значение до 365
jawbreaker
25.02.2009, 13:19
Zulf
rand() возвращает случайное число в некотором диапазоне, если взять остаток от этого числа при делении на 365 то получится другое случайное число, меньшее чем 365.
Fl0dER
ну так и напиши:
z = num % 10;
y = (num / 10) % 10;
x = (num / 100 ) % 10;
c = (num / 1000 ) % 10;
идея ясна?
Здравствйте, нужен пример простенькой программки, есть окно, в нем поле "parameters", вводим например -secure, жмем на "Выполнить", и запускается "file.exe -secure" параметрами.
Спасибо :)
С++
Возможно сохранять указатели сокетов принятых с помощью accept в каком нибудь STL контейнере так ,что б их потом можно было "достать" от туда для дальнейшего использования?
Возможно ли в С++ динамически объявлять размер string массива.
не так как обычно:
string test[15];
так тоже не подходит:
#define size 15
string test[size];
,а вот так (у меня при этом вылезает ошибка)
int size = 15;
string test[size];
и тут такая же ошибка..
int size = 15;
#define len size
string test[len];
С меня + :)
int len=123;
string *c;
c = new string[len];
так попробуй
2 _nic после accept ты получишь дискриптор сокета типа ULONG и по этому как хочешь так и юзай его. можешь в массив записать, хоть куда пиши неважно.
Можно даже потоку передать при его запуске. Это всеголишь число а не структура
2 _nic после accept ты получишь дискриптор сокета типа ULONG и по этому как хочешь так и юзай его. можешь в массив записать, хоть куда пиши неважно.
Можно даже потоку передать при его запуске. Это всеголишь число а не структура
Так с этими числа потом send,recv работать будут?
объявляеш указатель присваиваеш ему этот адрес и работаеш
да. в жестоком смысле дискриптор - это всеголишь 16/32 битное число соответствующее чему либо. ТОже и с файлами.
сам можешь поглядеть сделав вывод на экран этого числа.
Дискрипторы уникальны для каждого процесса, за исключением случаев наследования.
Так что получив дискриптор чего либо в своей проге, ты можешь сохранить его и юзать где у годно внутри проги.
Ещё вопрос по контейнерам.Вот пример из википедии
http://ru.wikipedia.org/wiki/Ассоциативный_массив#.D0.91.D0. B8.D0.B1.D0.BB.D0.B8.D0.BE.D1.82.D0.B5.D0.BA.D0.B0 _STL_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0_C.2B.2B
Но только вот борландский компилятор ругается на строчки
cout << (*ifind).first() << "'s phone is " << (*ifind).second << endl;
...............
cout << (*i).first() << "\t " << (*i).second << endl;
[C++ Error] Unit1.cpp(21): E2314 Call of nonfunction
В чем прикол?
Ещё вопрос по контейнерам.Вот пример из википедии
http://ru.wikipedia.org/wiki/Ассоциативный_массив#.D0.91.D0. B8.D0.B1.D0.BB.D0.B8.D0.BE.D1.82.D0.B5.D0.BA.D0.B0 _STL_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0_C.2B.2B
Но только вот борландский компилятор ругается на строчки
cout << (*ifind).first() << "'s phone is " << (*ifind).second << endl;
...............
cout << (*i).first() << "\t " << (*i).second << endl;
В чем прикол?
разве в second не нужно дописывать скобки в конце как в first() ?
т.е.
(*i).second()
разве в second не нужно дописывать скобки в конце как в first() ?
т.е.
(*i).second()
Да какая разница всеравно пример некомпилируется все с той же ошибкой
Так с этими числа потом send,recv работать будут?
как я понимаю - да.
Кстати - очень удобное использовать для такой вещи двусвязные списки. Сам так использую.
Вот вопросик.Сокеты.
Пытаюсь в целях учения написать чат( ну просто обмен сообщениями чтоб был).
Клиент как бы я сделал с select(); примерно такая конструкция:
s - сокет с которым работаю.
while(1)
{
FD_ZERO(&wfds);
FD_SET(s,&wfds);
maxfd = s;
int chars = 0;
selt = select(maxfd+1, NULL, &wfds, NULL, NULL);
std::cout<<"You say: ";
while((c = getchar()) != 10)
buff[chars++] = c;
buff[chars] = 10;
if(FD_ISSET(s,&wfds))
send(s,buff,chars,0)
if(FD_ISSET(s,&rfds)){
int wers;
while((wers = recv(s, static_cast<char *>(buff),sizeof(buff),0)) > 0){
std::cout<<"Server say: ";
for(int i = 0; i < wers; i++)
std::cout<<buff[i];
std::cout<<std::endl;
}
}
}
Вот тут как бы проблема вот в чем: если пользователь не вводит символы , то код сразу встает , в следствии сообщения не приходят. Как это обойти? я как бы не знаю алгоритма , вот у вас спрашиваю. Только потоки не предлагать(триды)
Не зацикливать программу а обрабатывать сообщение FD_READ.
небольшой пример этого есть тут _ttp://www.compdoc.ru/prog/cpp/proxyserver/
mr.Babay
26.02.2009, 15:26
Как реализовать сканер по локальной сети на определённый порт(а точнее на определённый софт "сидящий" на этом порту) и чтобы локальная сеть самоопределялась?!?
Как реализовать сканер по локальной сети на определённый порт(а точнее на определённый софт "сидящий" на этом порту) и чтобы локальная сеть самоопределялась?!?
__tp://devoid.com.ua/pascal-delphi/delphi-network-programming/prosteishiy-skaner-portov-na-delphi.html
Все делаеш по аналогии только в цикле меняеш IP. Переписать на си думаю не составит труда название функций и структур те же ибо апи.
ps;начинать надо с google.com
mr.Babay
26.02.2009, 17:43
St0nX, спасибо, НО
Извиняюсь за не правильно поставленный вопрос, но мне нужно чтобы прога сама "тянула" локальный IP компа, а потом по маске вынутого IP сканировала сеть...
ps;начинать надо с google.com
баян :-В
Ой, да и ещё там не объясняется как искать софт... как определить то что на этом порту то что надо!?
Всем доброго времени суток! Помогите, пожалуйста, найти ошибку в программе. при вводе
q q 1
w w 2
e e 3
и записи этого в файл, вместо того, чтобы вывести из файла это же самое программа выводит только 1 2 и 3 :( в чём ошибка?
[CODE]
#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <cstring>
#include <stdio.h>
#include <fstream>
#include <sstream>
#include <conio.h>
class tovar
{
public:
char Firm[100];
char Name[100];
int Cena;
int dollar;
void enter_tovar(void);
void show_tovar(void);
void dollar_tovar(void);
void enter_file(void);
void show_file(void);
};
void tovar::enter_tovar(void)
{
std::cout << "Фирма: ";
std::cin >> Firm;
std::cout << "Модель: ";
std::cin >> Name;
std::cout << "Цена: ";
std::cin >> Cena;
};
void tovar::show_tovar(void)
{
std::cout << std::endl << Firm << " " << Name << " " << Cena << std::endl;
};
void tovar::dollar_tovar(void)
{
Cena=Cena / dollar;
};
void tovar::enter_file()
{
std::fstream file( "bd.txt", std::ios::app);
file << Firm << "\n";
file << Name << "\n";
file << Cena << "\n";
file.close();
};
void tovar::show_file()
{
std::fstream file( "bd.txt", std::ios::app);
file.open( "bd.txt", std::ios_base::in );
file >> Firm;
file >> Name;
file >> Cena;
file.close();
};
int main() {
setlocale(LC_ALL,"Russian");
tovar st[3];
int n = 3;
int a, d;
do{std::cout << "1-Ввод данных | " << "2-Вывод на экран | " << "3-Перевести рубли в доллары | " << "4-Сохранить файл | " << "ESC - Выход \n";
a=getch(); switch(a)
{
case 49:
for(int i=0; i<n; i++) {
st[i].enter_tovar();
system("cls");
}
break;
case 50:
for(int i=0; i<n; i++) {
st[i].show_tovar();
}
getch();
system("cls");
break;
case 51:
system("cls");
std::cout << "Введите курс доллара:";
std::cin >> st[1].dollar;
st[0].dollar=st[2].dollar=st[1].dollar;
for (int i=0; i<n; i++){
st[i].dollar_tovar();
}
break;
case 52:
std::fstream file( "bd.txt", std::ios::app );
for ( int i = 0; i < n; i++ )
{
st[i].enter_file();
}
for ( int i = 0; i < n; i++ )
{
st[i].show_file();
}
for ( int i = 0; i < n; i++ )
std::cout << std::endl << st[i].Firm << " " << st[i].Name << " " << st[i].Cena << std::endl;
break;
/* case 53:
break;*/
}
} while(a!=27);
return(0);
} /[CODE]
Проблема решена, всем спасибо! :)
Извиняюсь за не правильно поставленный вопрос, но мне нужно чтобы прога сама "тянула" локальный IP компа, а потом по маске вынутого IP сканировала сеть...
gethostname() - используя ее получаеш ип приводиш к нужному виду далее все о чем я говорил выше.
Ой, да и ещё там не объясняется как искать софт... как определить то что на этом порту то что надо!?
Я не знаю такого метода сканирования. Если только проверять не зарезервирован он под какую то службу или нет.
__tp://bugtraq.ru/library/books/attack/chapter05/
Какие win32 api использовать чтоб просмотреть данные о файле время создание и тп...подскажите пожалуйста.
Какие win32 api использовать чтоб просмотреть данные о файле время создание и тп...подскажите пожалуйста.
MSDN (http://msdn.microsoft.com/en-us/library/aa364232(VS.85).aspx)
Как внутри функции main() получить содержимое параметров если они передавались так:
test.exe -h param_value -t param_value
?
int _tmain(int argc, _TCHAR* argv[])
прототип функции мэйн для консоли. первый параментр - количество аргументов, второй параметр - массив строк - аргументов
пример
printf("File %ws\n",argv[0]);
printf("First arg %ws\n",argv[1]);
для юникода. если ASCII, то не %ws, а %s
G.H.O.S.T
27.02.2009, 20:58
Самый гениальный вопрос-)
Я с давних времен использую Борланд С 3.1
Какие принципиальные отличия, улучшения в более новых версиях?
G.H.O.S.T
27.02.2009, 22:18
h01der, иди в школу.
Я спросил у знающих людей, что они посоветуют, это явно не ты
Народ помогите ... Ужас замучился
Мне надо прочитать данные из реестра типа REG_SZ ,
юзаю RegQueryValueExA ... но правельно не как немогу использовать , то выдает неправельно , менял типы unsigned char ошибка компиляции пугается и т.д Уже весь нет облазил .... Помогите
Вот код
unsigned long size = 15;
unsigned char *id;
DWORD type = REG_SZ;
HKEY rKey;
RegOpenKeyExA(HKEY_CURRENT_USER,"Software\\MyProg",0,KEY_READ,&rKey);
RegQueryValueExA(rKey,"id",NULL,NULL,&id,size);
Как получить время с милисекундами в формате unix? Фактически нужен аналог PHP-функции microtime
0x0c0de, спасибо, но мне кажется что ты это про обычные параметры типа
test.exe value1 value2
Порывшись гугле я понял что мне нужно подобие юниксовской getopt(). Не знете где её взять?
printf(FindFileData.dwFileAttributes); как преобразовать тип в скобках dword как его сделать чар?) printf((char)FindFileData.dwFileAttributes) Неканает подскажите если нетрудно.
printf(FindFileData.dwFileAttributes); как преобразовать тип в скобках dword как его сделать чар?) printf((char)FindFileData.dwFileAttributes) Неканает подскажите если нетрудно.
Сделать можно с помощью (char *), но судя по параметру, который вы хотите передать printf у вас все равно ничего не заработает, хотя и скомпилится. Даже описание параметров printf не удосужились посмотреть. printf в качестве первого аргумента принимает указатель на строку, а поле структуры dwFileAttributes - это не указатель на строку (видите, там dw - DWORD).
Если вам надо вывести это поле, делайте это так
printf("FindFileData.dwFileAttributes = %X\n",FindFileData.dwFileAttributes);
Что не кто не может помочь ? Воторой день мучаюсь
как прочитать ключ REG_SZ из реестра ?
DWORD dwSize = 256,dwType = REG_SZ;
char id[256];
HKEY rKey;
RegOpenKeyExA(HKEY_CURRENT_USER,"Software\\Opera Software",0,KEY_READ,&rKey);
RegQueryValueExA(rKey,"Plugin Path",NULL,&dwType,(LPBYTE)&id,&dwSize);
Когда прототипы функций начнем в msdn смотреть?
LONG RegQueryValueEx(
HKEY hKey,
LPCTSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
);
Я правильно понимаю что если сокет будет закрыт допустим со стороны сервера ,то со стороны клиента recv вернет 0 ?
Я правильно понимаю что если сокет будет закрыт допустим со стороны сервера ,то со стороны клиента recv вернет 0 ?
Да.
А вот тут вопрос.
Виндовский select() чо реально не читает файловые и др. дескрипторы кроме сокетов??
Риально не читает.
Пробую поставить cygwin на dev-cpp что-то не получается настроить.
А допустим сделал я int s = open(); или int s = fileno(stdin);
Какие есть аналоги select() чтоб потом проверить на доступность чтения/записи?
Если я тебя правильно понял ты хочеш асинхронно работать с файлом\потоком\диском\порт м... для этого есть API функции подробней тут http://pblog.ru/?p=74 хоть примеры и на делфях но думаю разобратся проблем не будет.
Если я тебя правильно понял ты хочеш асинхронно работать с файлом\потоком\диском\порт м... для этого есть API функции подробней тут http://pblog.ru/?p=74 хоть примеры и на делфях но думаю разобратся проблем не будет.
Мне нужно работать с 10-1000 объектами одновременно. А там походу только для одного объекта функция.Мне подсказали WaitForMultipleObjects , попробую почитать про неё.
А чем тебя потоки не устраивают?
А чем тебя потоки не устраивают?
Нафиг они мне , и если что , то в юникс ... и обходятся как то. select() хорошая функция , только в виндовсе она не жрет файловые дескрипторы и др,, кроме сокетов.
Прошу прощения , не так вырозился. Имею ввиду не используют. Не ну используют , но знаю тех , кто и обходится без них.
Это для меня новость, чесно говоря, что в юниксе нету потоков, потому что они там есть. Ну раз потоки не нужны можеш сидеть извращатся.
Это для меня новость, чесно говоря, что в юниксе нету потоков, потому что они там есть. Ну раз потоки не нужны можеш сидеть извращатся.
Кто fork() отменил??? :eek:
Кто fork() отменил??? А какое отношение форк имеет к потоком? Или лишь бы посты набить?
Можете помоч настроить Cygwin GCC с Dev-Cpp ?
Поставил Cygwin - в выборе что ставить , выбрал GCC и GCC с си++(точное название не помню).
В настройках Dev-Cpp вроде прописал пути до .exe и папки инклудов, но подозреваю , что криво, т.к. не робит.
Может кто подкинуть статейку по настройке или сам скажет , какие директории и .exe файлы прописать в настроках.
Вобщем у меня небольшая проблемка, надо разобрать большой файл, обьемом около 500к строк с данными ГПС. В файле строки
$GPRMC,153255,A,6734.2373,N,03323.8671,E,000.0,354 .3,090209,013.2,E*7A
Мне надо вытаскивать в 2 массива значения широты и долготы 6734.2373, 03323.8671. Потом с ними еще надо будет проводить кое какие математические операции, но это уже не важно, у меня проблема в разборе самой строки, вобщем никак не получается вытащить значения широт и долгот, хелпните кто может)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#define FNAME "abc.txt"
int main(void)
{
char fname [20]= FNAME;
FILE *in;
int flag,i,P,test;
char array[150];
char k;
if ((in = fopen(fname, "r"))== NULL)
{
printf ("Error open file");
return 1;
}
while((k = fgetc(in)) != EOF)
{
if (k==','&&flag==3) // символ запятая И флаг==3, я так понимаю что когда вхожу в ИФ то указатель остается на том же символе, или не так?
{
test= fscanf(in, "%1e", array); // здесь я пытался вытащить 1 символ из In
i++;
flag=flag+1;
}
else { flag++; } //тут еще непридумал как дальше флаг увеличивать и обнулять
}
fclose(in);
return 0;
}
Какой тип данных позволяет хранить ip ? и я хочу создать двусвязный список, каждый элемент списка должен содержать переменную с ip адрессом , каждый раз список должен создаваться при зпуске, т.е. мне еще узнать бы , как можно инкрементировать ип? допустим начинаю с 10.0.0.2 , не могу же я сделать 10.0.0.2 +1 , я скоре всего получу ошибку или 11.0.0.2 , вот как можно инкрементировать ип?
>>Какой тип данных позволяет хранить ip
int
>>Какой тип данных позволяет хранить ip
int
int вроде числа с точкой не поддерживает Оо или вы предлагаете int.int.int.int ?
jawbreaker
08.03.2009, 20:15
Glazz
создай структуру с 4мя полями типа byte и не парься
jawbreaker
прошу прощения за мою тупость, но что-то не могу найти тип byte.
И как вы себе представляете себе получения значения?
это же получится что-то такое:
struct ip {
byte ip1,ip2,ip3,ip4;
}
ip s1;
допустим дальше я хочу передать это в функцию - как это так получится?
jawbreaker
08.03.2009, 21:21
Glazz
В Visual C++ и вправду нет byte, так что извиняюсь. Из того что есть (http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx) я бы использовал unsigned __int8. А структуру можно передавать в функцию так же как и число, строчку и тп. Написал тут пример:
#include <iostream>
using namespace std;
struct ip
{
unsigned __int8 ip1,ip2,ip3,ip4;
};
void foo(ip & tmp) // & означает передачу по ссылке
{
tmp.ip1 = 1;
tmp.ip2 = 2;
tmp.ip3 = 3;
tmp.ip4 = 4;
}
void show_ip(ip cur)
{
cout << (int)cur.ip1 << "." << (int)cur.ip2 << "." << (int)cur.ip3 << "." << (int)cur.ip4;
}
int main()
{
ip my;
foo(my);
show_ip(my);
cin.get();
return 0;
}
я юзаю Dev-Cpp.
а если я допустим хочу заполнять sockaddr_in ?
addr.sin_addr.s_addr=inet_addr(IP);
jawbreaker
08.03.2009, 21:40
Структура in_addr содержит поле s_addr. Этому полю можно присвоить 32х битное значение IP адреса. Для перевода адреса в целое число из строкового представления можно воспользоваться функцией inet_addr, которой в качестве аргумента передается указатель на строку содержащую IP адрес в виде четырех десятичных чисел разделенных точками. Можно, также, воспользоваться одной из следующих констант:
INADDR_ANY
все адреса локального хоста (0.0.0.0);
INADDR_LOOPBACK
адрес loopback интерфейса (127.0.0.1);
INADDR_BROADCAST
широковещательный адрес (255.255.255.255).
Так должно работать:
unsigned long adr1;
adr1=inet_addr("124.23.45.67");
А вот мне допустим нужно прогнать весь мой сегмент через inet_add(); ( допустим он 10.0.0.128 - 255). Это же нужно тогда как то инкрементировать ип :\ ну т.е. чтоб был inet_addr("10.0.0.130") .... inet_addr("10.0.0.145"); ... не писать же вручную так все ипы + они могут быть разными.
Просьба написать статью как Создать кейлоггер, что надо знать где начинать
jawbreaker
08.03.2009, 22:50
Glazz
я бы завёл 4 числа и прибавлял как тебе нужно:
char buf[20];
int a, b, c, d;
sprintf(buf, "%d.%d.%d.%d", a, b, c, d);
собственно в buf и содержится ip адрес
храни адреса в инте, а чтоб пройтись по диапазону можно так
int ip = 2130706433; //127.0.0.1
for(i = 0; i < 100; i++)
sin.sin_addr.s_addr = htonl(ip + i);
на каждом шаге цикла ты будешь получать инкрементированый адрес от 127.0.0.1 до 127.0.0.100
если хочешь прибавлять во второй октет то сдвинь i на 1 байт в лево (i <= 1;) и так далее
Вобщем у меня небольшая проблемка, надо разобрать большой файл, обьемом около 500к строк с данными ГПС. В файле строки
$GPRMC,153255,A,6734.2373,N,03323.8671,E,000.0,354 .3,090209,013.2,E*7A
Мне надо вытаскивать в 2 массива значения широты и долготы 6734.2373, 03323.8671. Потом с ними еще надо будет проводить кое какие математические операции, но это уже не важно, у меня проблема в разборе самой строки, вобщем никак не получается вытащить значения широт и долгот, хелпните кто может)
держи :D
#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;
int main() {
char fname[] = "abc.txt";
const char delim[] = ",";
char buff[100];
fstream in;
in.open(fname, fstream::in);
if (!in.is_open()) {
cerr << "Unable to open file " << fname << endl;
return 0;
}
char * tmp;
char * val;
double a, n;
while(in.getline(buff, sizeof(buff))) {
tmp = strtok(buff, delim);
while (tmp != NULL) {
tmp = strtok(NULL, delim);
if (!tmp) break;
if (strcmp(tmp, "A") == 0) {
val = strtok(NULL, delim);
if (val) a = atof(val);
} else if (strcmp(tmp, "N") == 0) {
val = strtok(NULL, delim);
if (val) n = atof(val);
tmp = NULL;
}
}
printf("A: %.4f, N: %.4f\n", a, n);
}
in.close();
return 0;
}
текущие значения ширины и долготы хранятся в переменных a и n. Добавление в массив уже прикрутишь сам, там ничего сложного :D
храни адреса в инте, а чтоб пройтись по диапазону можно так
int ip = 2130706433; //127.0.0.1
for(i = 0; i < 100; i++)
sin.sin_addr.s_addr = htonl(ip + i);
на каждом шаге цикла ты будешь получать инкрементированый адрес от 127.0.0.1 до 127.0.0.100
если хочешь прибавлять во второй октет то сдвинь i на 1 байт в лево (i <= 1;) и так далее
Идея интерсная. А такой вид ип адреса ты получил из
int ip = inet_addr("127.0.0.1") ; ?
Похоже не из inet_addr();
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot