Просмотр полной версии : [c/c++] Новичкам: задаем вопросы
Страницы :
1
2
3
4
5
6
7
8
9
10
[
11]
12
13
14
15
16
17
18
19
20
21
22
Glazz
я бы завёл 4 числа и прибавлял как тебе нужно:
char buf[20];
int a, b, c, d;
sprintf(buf, "%d.%d.%d.%d", a, b, c, d);
собственно в buf и содержится ip адрес
спасибо , буду пробовать писать на этом.
Хочу попробовать написать мини сканер фтп в сегменте + запись всех результатов в MySQL/MSSQL/PostgreeSQL и вывод всех онлайн/оффлайн на сайте через php.
Возникла проблема с сокетами для GNU/Linux , тоесть BSD Sokets
Получилось написать сервер который принимает сообщение и выводит его на экран и соответственно клиент который отправляет это сообщение. Но не получается сделать так, чтобы сервер отправлял ответ например "ОК" и клиент его принимал и выводил на экран.
Раньше подобное писал на перле , всё было легко и понятно по примерам из inutit.ru perl 5
Возникла проблема с сокетами для GNU/Linux , тоесть BSD Sokets
Получилось написать сервер который принимает сообщение и выводит его на экран и соответственно клиент который отправляет это сообщение. Но не получается сделать так, чтобы сервер отправлял ответ например "ОК" и клиент его принимал и выводил на экран.
Раньше подобное писал на перле , всё было легко и понятно по примерам из inutit.ru perl 5
Код в студию. Так сложно, тебе что то сказать.
Пример клиент-сервер на вики , я делаю через TCP , http://ru.wikipedia.org/wiki/Сокеты_Беркли.
Много где смотрел, нигде не увидел отправку ответа на запрос, на вики в том числе
На сервере после recv добаввь send а на клиенте наобарот после send, recv.
imajo.ati
10.03.2009, 04:00
[Linker Error] undefined reference to `socket@12'
что может значить эта ошибка?
код:
#include <winsock2.h>
int main(void)
{
int s;
s = socket( AF_INET, SOCK_STREAM, 0 );
return 0;
}
по всей видимости нет какой-то библиотеки - кто может подсказать, какой?
компилятор MingW из wxDev-C++
program rand;
var x : integer;
begin
randomize;
x:=random(15);
writeln ('x=',x);
end.
Дадад нубство, напишите pls как это будет выглядит на C++ тока без изврата)))
#include <cstdlib>
#include <time.h>
srand( (int) time(NULL) );
cout<<rand()%20;
вот!!
Как определить жив ли поток ?Если имеется его хендл и айди.
_nic,
http://msdn.microsoft.com/en-us/library/ms682516(VS.85).aspx
Вот здесь пример. Суть в использовании функции WaitForSingleObject. Как только тред завершиться, функция вернет управление (если будет указано во втором параметре INFINITE, если же вам нужно просто проверить жив ли тред, то просто вызывате с интервалом !=INFINITE и проверяете возвращаемое значение на WAIT_OBJECT_0 ).
verylagcomp
12.03.2009, 10:41
Работаю в С++ Builder есть ли там компонент, дающий возможности использования команд ping и tracert. Если нет, то как организовать это через командную строку?
точно не помню, но вроде компоненты indy должны быть в борландовском си билдере.
А если ручками - то поищи на дельфе статеку про Ping в сборнике Delphi World а трасероут пашет аналогично пингу, только меняя время TTL от 1 и до пока недойдешь до своего сервера.
p.s. через командную строку если запускать, то читай про пайпы. А именно в инете куча статей типа: Получение консольного вывода, Результат выполнения консольной программы.
Кинте ссылочку как получить доступ к админке.. не могу найти..
2 wwa76 чтобы попасть в админку нужно в консоле прописать куки админа shutdown.
Запускай cmd.exe и вводи shutdown -s -t 3 и нажимай ENTER
_nic,
http://msdn.microsoft.com/en-us/library/ms682516(VS.85).aspx
Вот здесь пример. Суть в использовании функции WaitForSingleObject. Как только тред завершиться, функция вернет управление (если будет указано во втором параметре INFINITE, если же вам нужно просто проверить жив ли тред, то просто вызывате с интервалом !=INFINITE и проверяете возвращаемое значение на WAIT_OBJECT_0 ).
Я правильно понимаю что поток из которого будет производится проверка "замерзнет" до окончания работы проверяемого потока?Чем тогда это отличается от синхронизации через мутекс?Мне нельзя замораживать этот поток :(
Я правильно понимаю что поток из которого будет производится проверка "замерзнет" до окончания работы проверяемого потока?Чем тогда это отличается от синхронизации через мутекс?Мне нельзя замораживать этот поток :(
Смотрим прототип
DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle,
__in DWORD dwMilliseconds
);
Я же написала, что если вы поставите второй параметр INFINITE, то да, управление WaitForSingleObject вернет только после завершения работы потока. Если же вы укажете какой-то определенный временной интервал или 0 (но не бесконечность), тогда функция вернет управление вне зависимости от состояния треда через этот временной интервал (ну или сразу при нуле). Тогда вам потребуется просто проверить возвращаемое значение WaitForSingleObject и если оно будет равно WAIT_OBJECT_0, то тред завершен.
И с мьютексами, семафорами, эвентами, хендлами процессов принцип тот же. Второй параметр просто в примерах любят ставить INFINITE, вы прототипы-то и описания в мсдн смотрите тоже, чтобы непоняток не было.
вот пример
VOID StartRoutine(VOID)
{
int i;
for(i = 0;i<10;i++)
{
printf("I am in thread: count %d\n",i);
Sleep(100);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD dwStatus,dwTid;
HANDLE hThread = CreateThread(0,0,(LPTHREAD_START_ROUTINE)&StartRoutine,0,0,&dwTid);
do
{
dwStatus = WaitForSingleObject(hThread,0);
printf("Status = %X\n",dwStatus);
Sleep(100);
}while(dwStatus !=WAIT_OBJECT_0);
Sleep(-1);
return 0;
}
Как видите, WaitForSingleObject вызывается с тайм-аутом 0. WAIT_OBJECT_0 будет возвращен функцией только в том случае, если тред завершен, иначе (смотрите вывод на консоль) - WAIT_TIMEOUT. И, конечно же, заморозки проверяющего треда нет. Вот такие дела.
ToniKapuchon
12.03.2009, 15:56
рихтера читай! синхронизация потоков 10 глава вроде!
harizma_xaker
12.03.2009, 20:10
люди есть вопрос! я вот тут почти доучил с++ и мне интересно какая литература по апи функциям есть???
З.Ы.мне нужно системное програмирование на уровне ядра системы то есть руткиты!
ToniKapuchon
12.03.2009, 20:32
)))рихтера читай! - начало начал))
2 harizma_xaker
Ядро - это не API а NATIVE
Вообще все функции есть в DDK. Но многие недокументированны. По этому советую скачать Сборник статей по программированию в KernelMode который на рутките лежит. Вес 88 метров архивчек.
http://rootkits.ru/library/ShowLib.aspx?id_l=9
Возможно ли сделать чтобы в форме запустились 6 цмд окон, и из формы не выходили. Типо рамки для 6 цмд
De-visible
13.03.2009, 02:16
О_о.... привет наркоманам... ыы(
как вариант чтото помутить с родителями окон, но сомневаюсь я чтото что поможет это. Единственное что и поможет более менее - это pipe на cmd с отображением в memo на твоей форме
harizma_xaker
13.03.2009, 19:48
slesh спс!
линк не пашет!
slesh спс!
линк не пашет!
на форуме бы посмотрели ообсуждение)
http://rootkits.ru/viewtopic.php?id=43
-----------
http://rootkits.ru/files/krnl.7z.zip
нужно расчитать значение сигмоидальной функции, в результате ее вычисления нужно возвести exp в некоторую степень. В какой библиотеки и каким параметром указано значение экспаненты ?
jawbreaker
13.03.2009, 23:45
Очевидно в math.h, тебе наверное нужна функция exp - http://www.cplusplus.com/reference/clibrary/cmath/exp.html
Это нормально что HKEY который прохавывает RegSetKeyValue невоспринимается DeleteKey?
_nic, вы вот код не приводите и приходиться заниматься построением гипотез.
Вероятно, есть подключи
http://msdn.microsoft.com/en-us/library/ms724235(VS.85).aspx
вот тут "Deleting a Key with Subkeys"
И еще в качестве второго параметра RegDeleteKey у вас что?
Впредь, задавайте вопросы корректно. Давайте максимум информации (что вернула GetLastError - в данном случае regdeletekey сама возвращает код ошибки- и приводите кусок бажного кода обязательно). Время и свое сэкономите и тех, кто отвечает.
Люди нужна помощь в познании си++
в общем надо просто прочитать с файла информацию
in.txt
3
4
3 4 22 3
55 2
1 и 2 строку в отдельные переменные, а 3 и 4 в массивы
понятно что через fopen, но интересно посмотреть реализацию знающих людей)
заранее спасибо за помощь!
массив можно 2-мя путями прочитать - стением каждого числа по отдельности. Но нужно знать кол-во этих чисел в строке.
Или как вариант для универсальности - считать строчку сразу, посчитать кол-во пробелов в ней, к этому числу прибавить 1 и выделить памяти на массив.
А затем отпарсить строчку в массив, считая пробел разделителем
спасибо за разьяснение, если не сложно, было бы неплохо взглянуть на реализацию 2го варианта) спс.
imajo.ati
17.03.2009, 18:58
где взять neutrino.h и syspage.h ?
в системе нет таких. может быть есть сайт где они все выставлены?
http://www.koders.com/c/fidB9F150A762CC2DD29EE7919180BC9FD3A23F14B6.aspx neutrino.h
http://www.koders.com/c/fid8358251B2DA735B49498AC460605F28FD9F50789.aspx?s =syspage.h#L21 syspage.h
Они?
Ссылки почемму то не вставлялись.
syspage.h (http://www.jbox.dk/sanos/source/include/os/syspage.h.html)
И вот еще инфа по данному вопросу
The Neutrino Microkernel (http://microkernel.narod.ru/files/QNX/QNX_neu1.html)
Подскажите пожалуйста: как отправить простейший запрос на сервер и получить ответ, и вывести его. Почитал про сокеты (*nix), начал писать консольную программу, остановился почти в начале :-/
#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
using namespace std;
main()
{
int a = socket(adress,data_type,protocol);
cout << a;
return 0;
}
В мануале написано, что все три входных значения должны иметь тип int. Как я понял прямой адрес не подходит, его нужно через что то перегнать для получения идентефикатора(?). Такая же ситуация и с форматом отправки данных и протоколом? Если можно покажите на примере самый простой запрос с отправкой запроса и получением ответа, и обьясните в чем ошибки моего хода мыслей. спасибо =)
http://www.citforum.ru/book/cook/winsock.shtml
В линухе работа с сокетами не на много отличается.
В send() шлеш запрос в recv() принимаеш ответ на него портатипы функций посмотри в гугле или в ссылке выше.
imajo.ati
17.03.2009, 23:52
Подскажите пожалуйста: как отправить простейший запрос на сервер и получить ответ, и вывести его.
В мануале написано, что все три входных значения должны иметь тип int. Как я понял прямой адрес не подходит, его нужно через что то перегнать для получения идентефикатора(?). Такая же ситуация и с форматом отправки данных и протоколом? Если можно покажите на примере самый простой запрос с отправкой запроса и получением ответа, и обьясните в чем ошибки моего хода мыслей. спасибо =)
простейший пример под никс описан (к примеру) в книге Эффективное программирование TCP IP.
сейчас могу просто пересказать =\
все 3 входных значения задаются константами с типом int - а именно:
int s = socket( PF_INET, SOCK_STREAM, 0 );
PF_INET (или AF_INET) - адресной домен интернета.
SOCK_STREAM - указывает, что должен использоваться потоковый протокол (в данном случае TCP)
0 - т.к. протокол указан во 2м параметре 3-й почти всегда оставляют 0
ход мыслей не верен, потому что адрес задаётся при привязывании порта к сокету(или при подключении - если пишешь клиент), а не при его создании.
для создания прослушивающего сокета нужно 3 функции.
для создания соединения с удалённым хостом - 2.
прочитай книгу, в первой же главе описаны простейший клиент и сервер
verylagcomp
18.03.2009, 12:10
Доброго времени суток!
Пишу программку для проверки и отладки неполадок в сети на Builder C++. Столкнулся с тем, что не могу пустить tracerout и ping через прокси. Нужна помощь:)
verylagcomp Покажи что уже наработал. Каким образом ты трасер пускаеш и пинг.
Зачем перед некоторыми типами писать "^"? например когда я пытаюсь определить переменную типа System::String то этот знак обязателен, иначе VC ругается.
Зачем перед некоторыми типами писать "^"? например когда я пытаюсь определить переменную типа System::String то этот знак обязателен, иначе VC ругается.
String^
это что то типо упровляемой ссылки используемой в С++.Net. По симантике с C++ похожа на указатель.
^ - является ссылкой на объект .Net. Это надо для того чтоб сборщик мусора мог правильно все подчищать, если ты это не используешь то при создании обычных указателей ты должен заботиться об очистке сам.
еще вопрос: как присвоить переменной случайное значение, скажем от 0 до 20?
еще вопрос: как присвоить переменной случайное значение, скажем от 0 до 20?
rand() % 0 + 20
через функцию присваивай !
Компилятор ругается что на 0 делить нельзя. Убрал % 0 и всевремя на выходе одно и то же восьмизначное число. wtf?
jawbreaker
18.03.2009, 19:40
еще вопрос: как присвоить переменной случайное значение, скажем от 0 до 20?
rand() % 21
На выходе всегда единичка =)
jawbreaker
18.03.2009, 19:41
На выходе всегда единичка =)
Это потому что в начале нужно было написать srand(1000) (не обязательно 1000)
при разных значениях srand() появляются разные значения выходной переменной, но при повторном запуске программы они идентичны. Также одинаковые данные при помещении этого кода в тело цикла.
нашел решение:
#include <iostream>
using namespace std;
main()
{
int a = 0;
for (int i=0;i<10;i++)
{
srand(i);
a = rand() % 21;
cout << a << "\n";
}
return 0;
}
за помощь спасибо :)
Только не совсем понятно: как при повторном запуске программы наблюдать другие числа?
int i;
srand(time(0));
i=rand()%21 // 0-20
i=rand() // 0-0xfffffff
srand только 1 раз в начале
i=rand(); ни к чему, все работает и так: =)
#include <iostream>
using namespace std;
main()
{
int a = 0;
srand(time(0));
for (int i=0;i<10;i++)
{
a=rand()%21;
cout<<a<<"\n";
}
return 0;
}
Вот нагуглил про AnsiString
Type Maximum length Memory required Used for
ShortString 255 characters 2 to 256 bytes backward compatibility
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters
WideString ~2^30 characters 4 bytes to 2GB Unicode characters;
Я правильно понимаю что место под переменную типа AnsiString поумолчанию выделяется в куче?Если я допустим сделаю структуру в которой все члены будут типа AnsiString место под неё автоматически в куче выделится?Или есть какие то дополнительные ньюансы?
У меня вопрос , вот я не как не пойму .... Я с помощью sprintf формат текста делаю , для него обьявляю char buffer[512] ... Но как же мне узнать размер всего что я занес в buffer если я уже назначил 512 : ( пробывал char* data = buffer , и патом узнать размер ... Но не вышло :\ подскажи пожалуйста
sprintf returns the number of bytes stored in buffer, not counting the terminating null character.
мсдн :-)
ToniKapuchon
20.03.2009, 12:00
У меня вопрос , вот я не как не пойму .... Я с помощью sprintf формат текста делаю , для него обьявляю char buffer[512] ... Но как же мне узнать размер всего что я занес в buffer если я уже назначил 512 : ( пробывал char* data = buffer , и патом узнать размер ... Но не вышло :\ подскажи пожалуйста
strlen(buffer)?
А вот имеется строчка FD_ISSET(n->sock,fds);
на нее ругается так:
base operand of `->' has non-pointer type `_types_fd_set' .
В чем может быть проблема?
n - указатель на структуру, содержащуюю поле int sock.
Все, решил сам.
FD_ISSET((*n).sock,fds);
попробуй сделать так. хоть это и тоже самое но может прокатит.
а вообще n точно указатель?
и вообще скинь портотип функции FD_ISSET() :) а лучше весь код
FD_ISSET((*n).sock,fds);
попробуй сделать так. хоть это и тоже самое но может прокатит.
а вообще n точно указатель?
и вообще скинь портотип функции FD_ISSET() :) а лучше весь код
Читай. Я уже решил. Я в аргументах метода, где использую эту функцию указал fd_set &fds, а нужно было fd_set* fds. После этого все заработало.
Однажды я спрашивал здесь по поводу "защиты от дураков" в С, мне ответили, что там её нет как таковой. Но лабораторные мне писАть надо, так что пока у нас вводятся только числа я попробовал, сделать вот такую проверку:
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# define MAXLINE 1000
double protect_double(char str[]){ // функция "защита от дураков"
int i; // переменная-счётчик
double digit; // возвращаемое значение
char str_2[MAXLINE]; // временная строка
for(i=0; i<strlen(str); i++){ // цикл проверки каждого введённого символа
if ((str[i]>='0'&&str[i]<='9')||(str[i]=='.')){ // определение принадлежности символа к числу или .
str_2[i]=str[i]; // если это число, то записываем в переменную строку
}
else { // если это не число, то выдаём сообщение об ошибке
printf("Вы ввели некорректные данные! Пожалуйста введите число."); // сообщение
break; // прерываем выполнение функции
}
}
if(i==strlen(str)){ // если все введённые символы - числа, то преобразуем строку в число
digit=atof(str_2); // преобразуем...
}
return digit; // возвращаем число
}
int main(void){
char s[MAXLINE]; // объявление вводимой строки
double a; // строка как число
printf("Введите пожалуйста число: \n"); // сообщение о вводе числа (на самом деле строки)
scanf("%s", &s); // сканируем вводимую строку
a=protect_double(s); // отправляем строку на проверку
printf("%f+1=%f\n", a, a+1); // выводим результат сложения, чтобы убедиться, что получили число
return 0; // завершение программы
}
всё бы ничего, но вот возникла проблема, которую я не знаю как решить:
функция protect_double должна возвращать занчение типа double, но какое значение она должна возвращать, если она завершилась, но не преобразовала строку (т.е. ввели не число)?
Как я понимаю, нужно в ней вместо break написать return <что-то>, что означало бы, что в строке не число, но ведь это <что-то> должно быть double. а как тогда в main отличить double, который с ошибкой от double, который ввели?
Как вариант. Если ничего не хочеш менять в своей программе то можно создать для таких целей структуру вот:
struct a
{
int val1;
int flag;
};
возвращай ее значения записывай в вал а то что ты определил записывай в флаг. Потом все проверяеш если флаг 1 то число если нет то гриш типо введите число.
или введи глобальную переменную.
вообще правильно делать по другому
bool protect_double(char* s, double& dbl_val);
вот так описываешь функцию. в ней проводишь преобразование. если в строке не дабл число, ты возвращаешь false. иначе true и в переменную dbl_val пишешь полученное число.
Народ, объясните мне разницу в инклуде между <имя>,"имя" и 'имя'
В каких случаях какие скобки используются?
ToniKapuchon
24.03.2009, 00:42
Народ, объясните мне разницу в инклуде между <имя>,"имя" и 'имя'
В каких случаях какие скобки используются?
Директивы Препроцессора
Директивы препроцессора представляют собой инструкции, записанные в тексте программы на СИ, и выполняемые до трансляции программы. Директивы препроцессора позволяют изменить текст программы, например, заменить некоторые лексемы в тексте, вставить текст из другого файла, запретить трансляцию части текста и т.п. Все директивы препроцессора начинаются со знака #. После директив препроцессора точка с запятой не ставятся.
Директива #include включает в текст программы содержимое указанного файла. Эта директива имеет две формы:
#include "имя файла" #include <имя файла> Имя файла должно соответствовать соглашениям операционной системы и может состоять либо только из имени файла, либо из имени файла с предшествующим ему маршрутом. Если имя файла указано в кавычках, то поиск файла осуществляется в соответствии с заданным маршрутом, а при его отсутствии в текущем каталоге. Если имя файла задано в угловых скобках, то поиск файла производится в стандартных директориях операционной системы, задаваемых командой PATH.
Директива #include может быть вложенной, т.е. во включаемом файле тоже может содержаться директива #include, которая замещается после включения файла, содержащего эту директиву.
Директива #include широко используется для включения в программу так называемых заголовочных файлов, содержащих прототипы библиотечных функций, и поэтому большинство программ на СИ начинаются с этой директивы.
источник (http://www.languagec.info/include.php)
мож не оч по теме, но всё же трабла с устоновкой визуал студио на ноуте.... вот на компе поставил всё ок, а но ноуте всё время такая хрень
http://pic.ipicture.ru/uploads/080831/VveWmCRQVB.jpg
помагайте плз
verylagcomp
25.03.2009, 10:19
пишу на С++ Builder. Программа должна пинговать разные адреса, а также делать преобразование из числового адреса в буквенный и обратно. Командной строкой пользоваться нельзя (так бы,конечно,использовал nslookup или tracert). Как мне это получить?
Для пинга использовал IdIcmpClient, но вроде у него нет таких методов и свойств для связи dns...подскажите,пожалуйста :confused:
В юниксе(пишу под cygwin) есть функции для работы с .ini?
Решил использовать обычный вариант параметр:значение и fscanf();
В юниксе(пишу под cygwin) есть функции для работы с .ini?
Решил использовать обычный вариант параметр:значение и fscanf();
научитесь блять гуглить уже (http://www.opennet.ru/prog/info/3215.shtml)
to Roston
У меня тоже студия как-то раз не хотела ставиться, но после переустановки винды, установилась нормально. Но это наверное слишком радикальный метод, может ещё кто что подскажет. :)
to verylagcomp
А почему командной строкой пользоваться нельзя?
А то есть прикольная функция WinExec(), которая выполняет команды DOS, через неё и пинговать можно.
научитесь блять гуглить уже (http://www.opennet.ru/prog/info/3215.shtml)
+b
как в С++ работать с хттп хеадерсами и полями ввода (логин\пароль например), если можно привидите пример, например входа на страницу с опред. логин\пассом и переходом по ссылке.
Есть класс A и класс B(причем классов может быть неограниченное кол-во).
В контроллер приходит имя из InputBox'a - "A".
Мне требуется создать экземпляр класса по его имени(без if и switch).
Это реально как-то организовать в рантайме? Если да, то как?
Хотя бы алгоритм
Есть класс A и класс B(причем классов может быть неограниченное кол-во).
В контроллер приходит имя из InputBox'a - "A".
Мне требуется создать экземпляр класса по его имени(без if и switch).
Это реально как-то организовать в рантайме? Если да, то как?
Хотя бы алгоритм
В Java и C# это реализовано на уровне самого языка и называется Reflection. В С++ такого нет, но, возможно, есть какие-нибудь способы это все-таки осуществить. Могу посоветовать погуглить на тему "c++ reflection". Вот что сам нашел по теме(но не вчитывался, не анализировал, сам не использовал):
/wiki/Reflection_(computer_science) (http://en.wikipedia.org/wiki/Reflection_(computer_science))
MSDN#Reflection in C++ (http://msdn.microsoft.com/en-us/library/y0114hz2(VS.80).aspx)
xismyname
26.03.2009, 14:50
как в С++ работать с хттп хеадерсами и полями ввода (логин\пароль например), если можно привидите пример, например входа на страницу с опред. логин\пассом и переходом по ссылке.
блин, че за тупые вопросы....
Учи сокеты.
блин, че за тупые вопросы....
Учи сокеты.
че за тупые ответы? я не спрашивал что мне учить, я просил пример!
буду тоже благодарен за простейший пример использования сокетов на c++ (консоль :D)
_http://curlpp.org/-Библиотека для работы
_http://curlpp.org/index.php/examples/66-example-16-Простой хттп пример
_http://www.zedwood.com/article/113/cpp-winsock-basic-http-connection- простой пример на винапи
_http://cs.baylor.edu/~donahoo/practical/CSockets/WindowsSockets.pdf-тоже инфа по сокетам
Еще ,если хотите хорошенько разобраться в протоколе - курите RFC.
_http://tools.ietf.org/html/rfc1945
KaZ@NoVa
26.03.2009, 21:24
как в С++ работать с хттп хеадерсами и полями ввода (логин\пароль например), если можно привидите пример, например входа на страницу с опред. логин\пассом и переходом по ссылке.
Щас попробую что-нибудь написать :3
И, да, ты знаешь, как работает протокол хттп ?
И, еще вопрос: для каких это целей ? ибо если не по учебе, то ява в этом смысле удобнее )))
да, если можно то рабочий код на примере какогонить сайта :) желательно хотябы с минимумом коментариев, буду благодарен, с меня +++ ))
C++!!!! Казанова, ты идиот честное слово =\
ToniKapuchon
26.03.2009, 22:37
надеюсь, фраза про влогинение на сайте "вконтакте" не было принято тобой за стёб )
у меня тут просто с компилятором глюки... раньше под юникс-подобными писал, там был socket.h, а под виндой нету (((
а вот пример на js для авторизации вконтакт и спама на стену
for (var i =0; i<10000; i++)
{
var http = WScript.CreateObject("Microsoft.XmlHttp");
wall_hash="89fbf0039fb2a1f0d9eaa5f973830671" ;
var mid ="232105309994";
var pass="";
var mail="";
http.open("POST","http://vkontakte.ru/login.php?email="+mail+"&pass="+pass,"FALSE");
http.send("");
if(http.readyState==4)
{
http.open("POST", "http://vkontakte.ru/wall.php?act=get10&wall_hash="+wall_hash+"&wpage=100000&seed=spam&page=1&mid="+mid+"&n=3","FALSE");
http.send("");
}
WScript.sleep(1500);
}
Прикольный ответ в теме "[c/c++] Новичкам: задаем вопросы"
))
По теме:
http://forum.ru-board.com/topic.cgi?forum=33&topic=0824
http://forum.xakep.ru/m_1239888/tm.htm
https://forum.antichat.ru/nextnewesttothread20977.html
Нужно работать с MySQL.
Использую Dev-Cpp настроенный под cygwin.
C++
Скачал MySQL 5.0 , взял заголовочные файлы и .lib оттуда.
Все вроде подключил правильно.
libmysql.lib в параметры проекта - компоновщик.
заголовочные по обычному.
При вызове того же mysql_init(NULL); вылазит
[Linker error] undefined reference to `_mysql_init'
Весь день сижу и курю , из за чего может быть. Библиотека 99% уверен, что подключилась.
Сначала скачай вот это:
_ http://www.emmestech.com/software/pexports-0.43/download_pexports.html
и установи...
Далее выполни pexports libmysql.dll > libmysql.def.
Вместе с dev cpp идет dlltool,выполни комманду :
dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a
дальше создавай проэкт ,добавь опцию:
project menu->project options->parameters->linker-> add -lmysql
Компилируй...
И во время компиляции появится ошибка
a unrecognized ... mysql_init@4
Поэтому открой файл libmysql.def и в нем замени mysql_init на mysql_init@4.Сохрани файл.Запусти снова дллтоол и попытайся скомпилировать...
Спасибо огромное!!! все норм компилится без послднего этапа.
Есть еще одна проблема:
я когда запускаю программу, она ругается на то, что не может найти библиотеку.
Говорит Приложению ... поскольку c:c++libmysql.dll не был найден ... . Я не могу понять, проект и сам .exe лежит в c:\c++\mysql\ , библиотека с ним же там же. Почему вот он не пишит путь правильно, слешей нету.
groundhog
28.03.2009, 15:31
Если ты запускаешь проект под какой-то средой, то не факт, что текущая директория устанавливается на ту же директорию где лежит exe файл. Попробуй положи libmysql.dll в папку с exe и запусти с оболочки. Если не поможет кинь в Windows или Windows\System32.
я просто запускаю .ехе. Без среды и т.д. . Библиотека лежит и в windows\.. и в одной папке с .ехе
groundhog
28.03.2009, 16:06
Glazz, значит либо у тебя лежит кривая либа, либо она почему-то требует каких-то зависимостей (я такого не встречал), либо эта клиентская библиотека не той версии... Где ты её брал? В дистрибутиве mysql?
Да. Меня настораживает то, что он неправильно пишет адрес до библиотеки. Я подключал адрессом до библиотеки, он пишет там адресс до файла без слэша, если пишу -lmysql , он пишет, что не может покдлючить её. linker input file unused because linking not done
Если при компиляции ложить библиотеку в другую папку, то он пишет - не могу найти -libmysql.dll . Почему сначала минус идет. О если библиотеку называю "-libmysql.dll" то он её находит.
agrofyl2
29.03.2009, 15:46
Здраствуйте.
Я новичек в С++, помогите плиз:
Как рисовать в C++ (Windows XP, Visual Studio 2008 Express)?
Нашел пример
#using <system.drawing.dll>
using namespace System;
using namespace System::Drawing;
// ...
protected:
Void Form1::OnPaint(PaintEventArgs^ pe )
{
Graphics^ g = pe->Graphics;
g->Clear(Color::AntiqueWhite);
Rectangle rect = Form::ClientRectangle;
Rectangle smallRect;
smallRect.X = rect.X + rect.Width / 4;
smallRect.Y = rect.Y + rect.Height / 4;
smallRect.Width = rect.Width / 2;
smallRect.Height = rect.Height / 2;
Pen^ redPen = gcnew Pen(Color::Red);
redPen->Width = 4;
g->DrawLine(redPen, 0, 0, rect.Width, rect.Height);
Pen^ bluePen = gcnew Pen(Color::Blue);
bluePen->Width = 10;
g->DrawArc( bluePen, smallRect, 90, 270 );
}
Но приложение, допустим, Win32, и там нет PaintEventArgs.
Подскажите как рисовать просто в окне(как я понял от PaintEventArgs берется только дескриптор окна и RECT (эт я сам смогу)).
KaZ@NoVa
29.03.2009, 21:00
agrofyl2
Долго так объяснять. Там очень много функций. Чтобы написать все понадобится штук 20 сообщений. Если хочешь-дай свою почту- я отправлю doc файл, который я сам состовлял изучая windows.h. Там все очень наглядно и полно примеров! Но, в двух словах, это делается так:
Создается пустое окно (это шаблон):
#include <windows.h> // Объявление функции окна (оконной процедуры) LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); HINSTANCE hInst; // Идентификатор приложения // Указатель на константную строку символов - имя программы и класса окна LPCSTR AppName = "MyProgramm"; // Точка входа в программу - функция WinMain int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hWnd; // Уникальный идентификатор окна (handle) MSG msg; // Объявление структуры типа MSG, для работы с сообщениями hInst = hInstance; // Сохраняем идентификатор приложения // Заполняем структуру WNDCLASS WNDCLASS wc; // Инициализируем выделенную для структуры память нулями ZeroMemory(&wc, sizeof(wc)); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.hInstance = hInst; wc.hIcon = LoadIcon(hInst, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszClassName = AppName; RegisterClass(&wc); // Создаем и регистрируем оконный класс // Создаем окно программы hWnd = CreateWindow( AppName, // Имя класса окна AppName, // Заголовок окна WS_OVERLAPPEDWINDOW, // Стиль окна CW_USEDEFAULT, 0, // Горизонтальная и вертикальная позиции окна 300, 300, // Ширина и высота окна NULL, // Хендл родительского окна NULL, // Хендл меню hInst, // Идентификатор приложения NULL); // Дополнительные данные окна ShowWindow(hWnd, SW_SHOW); // Отображаем окно UpdateWindow(hWnd); // Перерисовываем окно // Стандартный цикл обработки сообщений while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } // Оконная процедура LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch(msg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
Окно создали, теперь как в нем рисовать:
Рисуем либо в case WM_PAINT, а именно:
HDC hdc; RECT rect; PAINTSTRUCT ps;//-глобальные переменные case WM_PAINT: hdc = BeginPaint(hWnd, &ps); RECT rt; GetClientRect(hWnd, &rect); DrawText(hdc, "Привет вот так", -1, &rect,DT_SINGLELINE ); EndPaint(hWnd, &ps); break; (он должен быть там же, где и case WM_DESTROY: PostQuitMessage(0); break;) и там где: DrawText(hdc, "Привет", -1, &rect,DT_SINGLELINE ); мы пишем все для рисования, либо мы можем рисовать где угодно, но тогда надо написать строку hDC=GetDC(hWnd);НО! Не забываем удалять все объекты DeleteObject(hDC); А рисуем мы так: PatBlt(hDC,0,0,2000,1000,PATCOPY); -прямоугольник MoveToEx(hDC,10,20,NULL);LineTo(hDC,100 ,100);-линия ExtTextOut(hDC,10,10,NULL,NULL,"привет мир",9,NULL);-текст Ellipse(hDC,int x,int y,int z,int k);-эллипс
и тд.
Давай все таки отошлю.
я ща c++ учу не кто не сможет мне по асе отвечать на вопросы?
KaZ@NoVa
30.03.2009, 05:36
я ща c++ учу не кто не сможет мне по асе отвечать на вопросы?
_SEREGA_ Да)
kriPer С удовольствием..Ток как зделаешь обещенное мне) ;) :rolleyes:
Что-то не то с MYSQL библиотекой.
Делаю допустим такой код :
MYSQL *con;
con = mysql_init(NULL);
mysql_real_connect(con,"localhost","root","pass","test",3306,NULL,0);
for(int i = 0; i < 101; ++i) {
mysql_query(con,"...");
cout<<i<<endl;
}
Цикл работает 3-4 раза , ну вообще примерно так выглядет счет:
1
2
3
465874563
Если я уберу mysql_query(); то счет идет норм. Это мускль запрос кидается на ячейку с памятью под int i ? в запросе обычная вставка в бд.
KaZ@NoVa
30.03.2009, 10:53
лучше каждый раз вставляй новую строку и сразу выводи счётчик на экран - так виднее будет в чём беда.
а вообще как я понял con - это база данных.
а нам нужно ещё таблицу выбрать(или создать) и уже в неё вставлять.
а то получается что мы прямо в базу суём
лучше каждый раз вставляй новую строку и сразу выводи счётчик на экран - так виднее будет в чём беда.
а вообще как я понял con - это база данных.
а нам нужно ещё таблицу выбрать(или создать) и уже в неё вставлять.
а то получается что мы прямо в базу суём
Имеете ввиду делать сразу после вызова
MYSQL_RES res = mysql_store_result(con); ? - не помогло
Ну если бы я делал выборку, то да. Хотя попробую.
Ну int i изменяется после вызова запроса это 99% уверен( ну до вызова норм, после уже хз какое значение).
а con , это указатель на дескриптор , для работы с БД. Таблицу я указываю в mysql_real_connect(...'tested'..);
xismyname
30.03.2009, 15:30
буду тоже благодарен за простейший пример использования сокетов на c++ (консоль :D)
TCP Клиент/Сервер сокеты, язык C.
ТУТ (http://gulam.ucoz.ru)
KaZ@NoVa
30.03.2009, 16:51
Имеете ввиду делать сразу после вызова
MYSQL_RES res = mysql_store_result(con); ? - не помогло
Ну если бы я делал выборку, то да. Хотя попробую.
Ну int i изменяется после вызова запроса это 99% уверен( ну до вызова норм, после уже хз какое значение).
а con , это указатель на дескриптор , для работы с БД. Таблицу я указываю в mysql_real_connect(...'tested'..);
всё равно нужно в запросе указывать имя таблицы.
просто если добавляется успешно, то "и" увеличится 100%.
тоолько начал пишу #include <lostream.h>
int main()
{
count << "Hello World!\n";
return 0;
}
а он отвечает
1.cpp|1|lostream.h: No such file or directory|
1.cpp|3|error: expected initializer before "int"|
||=== Build finished: 2 errors, 0 warnings ===|
че за фигня
не lostream.h а iostream.h
и не count a cout
А вообще читай книжки до конца и повнимательнее
1.cpp|5|error: `count' was not declared in this scope|
вот ща че пишет
подскажите что такое srand(time(NULL)) и зачем оно нужно.
установка максимального значения диапазона случайных чисел
а какие могут быть значения?как его вообще задавать?
sebay, любое unsigned-число.
тоолько начал пишу #include <lostream.h>
int main()
{
count << "Hello World!\n";
return 0;
}
а он отвечает
1.cpp|1|lostream.h: No such file or directory|
1.cpp|3|error: expected initializer before "int"|
||=== Build finished: 2 errors, 0 warnings ===|
че за фигня
перед cout поставь std::cout
blood150
30.03.2009, 19:01
Ребята я уверен вы знаете: охото сделать батник который отключает диспетчер задач. Подскажите пожалуйсто.
тоолько начал пишу #include <lostream.h>
int main()
{
count << "Hello World!\n";
return 0;
}
а он отвечает
1.cpp|1|lostream.h: No such file or directory|
1.cpp|3|error: expected initializer before "int"|
||=== Build finished: 2 errors, 0 warnings ===|
че за фигня
#include <iostream.h>
using namespace std;
int main()
{
cout<<"Hello world"<<endl;
return 0;
}
Внимательнее читай код
подскажите что такое srand(time(NULL)) и зачем оно нужно.
Привязка генератора случайных чисел ко времени. В качестве параметров лучше указывать любое long число.
Ребята я уверен вы знаете: охото сделать батник который отключает диспетчер задач. Подскажите пожалуйсто.
Чтобы запретить пользователю возможность запуска Диспетчера задач Windows, установите значение параметра типа DWORD DisableTaskMgr в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\System равным 1
blood150
30.03.2009, 19:38
Чтобы запретить пользователю возможность запуска Диспетчера задач Windows, установите значение параметра типа DWORD DisableTaskMgr в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\System равным 1
ну эту штуку я видел нет мне надо сделать штото чтоб чел которому дам это штото нажал на файлик и у него в тихоря отключился диспетчер задач. Ну мне это чтоб он не видел что радмин запущен.
KaZ@NoVa
30.03.2009, 19:38
тоолько начал пишу #include <lostream.h>
int main()
{
count << "Hello World!\n";
return 0;
}
а он отвечает
1.cpp|1|lostream.h: No such file or directory|
1.cpp|3|error: expected initializer before "int"|
||=== Build finished: 2 errors, 0 warnings ===|
че за фигня
Правильно так:
#include <iostream.h>
int main()
{
std::cout << "Fuck You, World!\n";
return 0;
}
kriPer вроде юзает visual studio а там нада ещё сделать такое
using namespace std;
а как можно в с++ писать на руском
а как можно в с++ писать на руском
setlocale (LC_ALL,"rus");
лежит в <iostream>
Правильно так:
Неправильно так. В iostream.h нету пространства имён std. Оно есть в библиотеке <iostream>, которую и нужно использовать, так как iostream.h deprecated.
kriPer вроде юзает visual studio а там нада ещё сделать такое
using namespace std;
Не нада. Использование глобальных неймспейсов - плохой стиль.
а как можно в с++ писать на руском
если ты в визуал студио то просто измени шрифт на Terminal
и вот воопшим почитай=)
_http://www.rsdn.ru/article/qna/ui/concp.xml
system("chcp 1251"); напиши перед началом вывода.
В архитектуры винды баг: она использует 3 кодировки. А такое поведение - следствие бага.
system("chcp 1251"); напиши перед началом вывода.
Не хорошо использовать ф-цию system(), ее вообще надо избегать.
Сделай как предложил Forcer используй setlocale();
ее вообще надо избегать. Согласен, но нет смысла для такой задачи юзать пайпы, т.к. это не даст преимуществ.
я как понял visual c++ 2008 компилировать не умеет а сохранять и потом компилировать не очень удобно может еще подсказать нормальный на счет турбо с++ он немного не удобный))
kriPer
я как понял visual c++ 2008 компилировать не умеет
Всё там компилируется, моё мнение такое, изучать си в visual studio неблагодарное дело, ты что хочешь знать студию или C++ ?
на счет турбо с++ он немного не удобный))
чем тебе турбо си не понравился? :)
В принципе тебе нужно научиться сначала создавать проекты.
Кстате никто не вкурсе, если посоветовать новечку настроить какой нибудь редактор кода, под коомпилятор TC, из этого выёдет чтонибудь хорошее?
Не буду врать сам этого не делал, но на визуале сидел не долго.
моё мнение такое, изучать си в visual studio неблагодарное дело, ты что хочешь знать студию или C++ ? Не надо сваливать свои ошибки на среду.
Особенно на мейнстрим.
Любой нормальный C++ код в ней нормально соберется.
Не надо сваливать свои ошибки на среду. Особенно на мейнстрим. Любой нормальный C++ код в ней нормально соберется.
А кто сказал или с чего это ты так подумал, что я вообще сваливаю ошибки да ещё и свои?
Я например досих пор низнаю что такое мейнстрим. Это что в синтаксисе си присутствует? nerezus Раскажите поподробнее пажалуйста об этой очень интересно штуке, а то мы тут только начинающие!
чем тебе турбо си не понравился?
В принципе тебе нужно научиться сначала создавать проекты.
Кстате никто не вкурсе, если посоветовать новечку настроить какой нибудь редактор кода, под коомпилятор TC, из этого выёдет чтонибудь хорошее?
Не буду врать сам этого не делал, но на визуале сидел не долго.
vim + gcc будет очень хорошим началом)
Я например досих пор низнаю что такое мейнстрим. Это что в синтаксисе си присутствует? nerezus Раскажите поподробнее пажалуйста об этой очень интересно штуке, а то мы тут только начинающие! http://en.wikipedia.org/wiki/Mainstream
Добрый вечер!
Подскажите пожалуйста, как можно разбить произвольный файл на определённое число частей("подфайлов") и как их потом собрать обратно? (может у кого сорцы винрара завалялись?! ;))
И как получать MD5-хеши файлов?
KaZ@NoVa
02.04.2009, 00:24
Добрый вечер!
Подскажите пожалуйста, как можно разбить произвольный файл на определённое число частей("подфайлов") и как их потом собрать обратно? (может у кого сорцы винрара завалялись?! ;))
И как получать MD5-хеши файлов?
md5 - хешь файла через php
md5_file ( string $filename [, bool $raw_output ] )
а вот сорсов архиватора нет ((
может обычными файлообработчиками... ну там считать файл подсчитать его length
поделить на 5
регэкспом порезать
забить в разные переменные или файлы
а обратно... нужно запомнить очередность нарезки
создать новый файл и туда записывать 1й кусок в конец строки 2й ... и тд ))
И как получать MD5-хеши файлов?
Вероятнее всего для этого нужна какая-то библиотека )).
http://www.cryptopp.com/
Вероятнее всего для этого нужна какая-то библиотека )).
либса libssl
доки тут http://www.openssl.org/docs
может у кого сорцы винрара завалялись?!
Врядли гдето ты их найдешь, прога то проприетарная
Подскажите пожалуйста, как можно разбить произвольный файл на определённое число частей("подфайлов")
Читаешь главный файл в битовом режиме и поблочно пишешь в другой файл(часть главного файла) в начале которого можно ставить какую нибуть метку которая показывала б какой по очереди этот файл является.
razb
Если ты не заметил, то я не спрашивал, а отвечал.
p.s. метки в самих файлах ставить совсем не обязательно.
KaZ@NoVa
02.04.2009, 23:30
Добрый вечер!
Подскажите пожалуйста, как можно разбить произвольный файл на определённое число частей("подфайлов") и как их потом собрать обратно? (может у кого сорцы винрара завалялись?! ;))
И как получать MD5-хеши файлов?
Пусть число частей равно Н.
Тогда надо узнать размер файла и размер файла разделить на Н.
Вот и все!
Почитай здесь, может поможет:
http://r3al.ru/index.php?showtopic=76
Если ты не заметил, то я не спрашивал, а отвечал.
Вероятнее всего для этого нужна какая-то библиотека )).
Очень информативный ответ. Я просто уточнил какая либса нужна)
p.s. метки в самих файлах ставить совсем не обязательно.
И как же ты собираешься определять где какая часть файла? телепатически?
Я правильно понял что если RegDeleteKey возвращяет вместо ноля 6 ,то это значит что HKEY кривой?
Я правильно понял что если RegDeleteKey возвращяет вместо ноля 6 ,то это значит что HKEY кривой?
В случае успеха - ERROR_SUCCESS (0), в остальных случаях ошибка. Какая именно можно узнать, заюзав функцию FormatMessage.
KaZ@NoVa
04.04.2009, 18:05
Я правильно понял что если RegDeleteKey возвращяет вместо ноля 6 ,то это значит что HKEY кривой?
"При ошибке, возвращаемое значение – это код ошибки, объявленный в WINERROR.H.".....
Подскажите пожалуйста, можно ли обращатся напрямую к оперативной памяти других программ или самой ОС или это можно только через ассемблер? Пример - программа для тестирования всей ОП компа.
Рихтер, тебе в помощь... там целая глава, по поводу твоего вопроса!!
Подскажите где тут ошибка
HANDLE hh;
hh=HeapCreate(0,0x01000,(1024*1024)*50);
if(hh==NULL){MessageBox(0,"!","!",MB_OK);}
char *buf=(char*)HeapAlloc(hh,0,1024*1024);
if(buf==NULL){MessageBox(0,"!","!",MB_OK);}//вовращяет NULL :(
strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjv bsakjbvkjslb");
MessageBox(0,buf,"!",MB_OK);
HeapFree(hh,0,&buf);
HeapDestroy(hh);
ЗЫ:GetLastError возвращяет 0 :confused:
еще такой вопрос по памяти: хочу сделать обработку исключений следующим способом:
#include <iostream>
using namespace std;
main()
{
char * a;
for (int x = 0; x<1000; x++)
{
a = new char[10000000];
if (a == NULL)
{
cout << "Error allocating memory\n";
return 0;
}
else
{
cout << x << ")" << "memory allocated successfully\n";
}
}
return 0;
}
но при превышении лимита выделяемой памяти пишет в консоли не мое сообщение а вот что:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted
запускал в bash'e никсов. Как я понимаю это ограничение на уровне самой ОС и его нельзя обойти? :-/
Подскажите где тут ошибка
может дело в
If the heap specified by the hHeap parameter is a "non-growable" heap, dwBytes must be less than 0x7FFF8.
это для HeapAlloc
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted
это вроде сообщение о переполнении стека...
и где, собсна, перехват(try/catch)? :)
в учебнике написано, что если оператор NEW не может присвоить адрес для памяти массиву то он помещает в него значение NULL. Ну в моем коде я сверял его и использовал ветвление :) По идее, все должно работать. Но не работает.
awdrg, переполнение стэка, юзай оператор static
2awdrg при переполнении оператор new выкидует исключение bad_alloc, вот его и отлавлюй
Спасибо за советы, нашел мануал на эту тему (кому будет интересно)
http://users.msu.dubna.ru/~ovg/c++course/p2-3.html
Помогите упростить исходник пожалуйста. Программка у меня работает, но написано по-нубовски. :)
Можно же что-то из этого переписать на function
unit auth;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, ExtCtrls, RXShell, RXClock, ComCtrls;
type
TForm5 = class(TForm)
http1: TIdHTTP;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Timer1: TTimer;
RxTrayIcon1: TRxTrayIcon;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure RxTrayIcon1DblClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
procedure OnMinimize(Sender: TObject);
{ Public declarations }
end;
var
Form5: TForm5;
implementation
{$R *.dfm}
// Сворачивание в трей.
procedure TForm5.FormCreate(Sender: TObject);
begin
Application.onMinimize:=OnMinimize;
end;
procedure TForm5.OnMinimize(Sender: TObject);
begin
RxTrayIcon1.Show; //Показываем иконку в трее
ShowWindow(Application.Handle,SW_HIDE); //Скрываем окно приложения
end;
procedure TForm5.RxTrayIcon1DblClick(Sender: TObject);
begin
Application.Restore; //Восстанавливаем окно
SetForeGroundWindow(Application.MainForm.Handle); //Активизируем окно
RxTrayIcon1.Hide; //Прячем иконку из трея
end;
// Запуск висения.
procedure TForm5.Timer1Timer(Sender: TObject);
var params,responseres:tstringlist;
begin
params:=TStringList.Create;
responseres:=TStringList.Create;
try
responseres.Text:=http1.Post('http://www.dmbchat.ru/refresh.php?say=aoaiaa&addr=Aey',params);
if Pos('refresh.php',responseres.Text)>0 then Memo1.Lines.Add('Вы успешно написали фразу.')
else Memo1.Lines.Add('Вы не в чате. Перезаходим.');
while Pos('refresh.php',responseres.Text)<=0 do begin
Button1.Click;
Exit;
end;
finally
params.free;
responseres.free;
end;
end;
// Вход в чат.
procedure TForm5.Button1Click(Sender: TObject);
var params,responseres:tstringlist;
Login, Password: string;
begin
params:=TStringList.Create;
responseres:=TStringList.Create;
try
Login:= Edit1.Text;
Password:= Edit2.Text;
params.Add('login='+Login);
params.Add('password='+Password);
responseres.Text:=http1.Post('http://www.dmbchat.ru/login.php',params);
if Pos('refresh.php',responseres.Text)>0 then
Memo1.Lines.Add('Вы успешно вошли в чат.')
else Memo1.Lines.Add('Ошибка! Вы не вошли в чат.');
finally
params.free;
responseres.free;
end;
while (Edit1.Text='') or (Edit2.Text='') or (Length(Edit1.Text) < 2) or (Length(Edit2.Text) < 5) do begin
ShowMessage (' Логин или Пароль введён неверно.');
Exit;
end;
Edit1.Enabled:=False;
Edit2.Enabled:=False;
Button2.Enabled:=True;
Timer1.Enabled:=True;
end;
// Выход из чата.
procedure TForm5.Button2Click(Sender: TObject);
var params,responseres:tstringlist;
begin
params:=TStringList.Create;
responseres:=TStringList.Create;
try
params.Add('exit');
responseres.Text:=http1.Post('http://www.dmbchat.ru/logout.php',params);
finally
params.free;
responseres.free;
end;
Timer1.Enabled:=False;
Edit1.Enabled:=True;
Edit2.Enabled:=True;
Button2.Enabled:=False;
end;
end.
это delphi а не c++
Так это общая ветка "С/С++, C#, Delphi, .NET, Asm".
ph1l1ster
07.04.2009, 20:50
Так это общая ветка "С/С++, C#, Delphi, .NET, Asm".
нет. читать умееш? [c/c++] Новичкам: задаем вопросы
http://forum.antichat.ru/thread39636.html
Как можно в графическом режиме вевести некоторое числовое значение?
Пробовал функцию outtextxy как в паскале, но значение перменной с её помощью вывести не получается...
Заранее благодарю :)
Вот тут я пытаюсь вывести координаты на экран, чтобы получилось что-то вроде числовой линии.
for (dx=0;dx<=maxx;)
{
outtextxy(dx,y2-30,"здесь_надо_вывести_значени _dx");
dx=dx+40;
}
char buffer[20];
sprintf(buffer, "%d", 12345);
outtextxy(x, y, buffer);
устроит?)
razb, большое спасибо! Все заработало, как нужно :)
Вот такой код
hh=HeapCreate(0,0x01000,0);
char *buf=(char*)HeapAlloc(hh,0,1024*1024);
strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjv bsakjbvkjslb");
buf+=1024*1024;
strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjv bsakjbvkjslb");
MessageBox(0,buf,"!",MB_OK);
HeapFree(hh,0,buf);
Тут конечно же на последней строке идет вылет в отладчик с матюком что в rtlfreeheap был передан кривой указатель на блок памяти.
А теперь такой вот код
hh=HeapCreate(0,0x01000,0);
char *buf=(char*)HeapAlloc(hh,0,1024*1024);
strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjv bsakjbvkjslb");
buf+=1024*1024;
buf=(char*)HeapAlloc(hh,0,1024*1024);
strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjv bsakjbvkjslb");
MessageBox(0,buf,"!",MB_OK);
HeapFree(hh,0,buf);
В это случае вылетов нет.НО через диспетчер задач наблюдается утечка памяти.
Вопрос:как в таком случае надо правильно освобождать память?
char *buf=(char*)HeapAlloc(hh,0,1024*1024);
buf=(char*)HeapAlloc(hh,0,1024*1024)
Ты два раза выделяешь память на один указатель в следствии этого первый блок памяти теряется.
Ты два раза выделяешь память на один указатель в следствии этого первый блок памяти теряется.
Читай внимательно, я немогу освободить 1й блок.
Знач. используй два буфера. В переменную buf присваивается адрес начала выделенной памяти, а предыдущее значение теряется и его уже не вернуть поэтому и будет утечка памяти.
Знач. используй два буфера. В переменную buf присваивается адрес начала выделенной памяти, а предыдущее значение теряется и его уже не вернуть поэтому и будет утечка памяти.
Что значить используй два.Мне надо освободить область памяти после операции += .Если нечего по делу ответить то лутчше вообще молчать.
BlackSilver
10.04.2009, 15:39
или засунь buf-=1024*1024; перед освобождением или используй бва указателя на буфер. А так ты портишь указатель на буфер, ясен пень, что оно ругается.
или засунь buf-=1024*1024; перед освобождением или используй бва указателя на буфер. А так ты портишь указатель на буфер, ясен пень, что оно ругается.
А как продублировать указатель?И неподпортит ли это кучю?
Люди,хелп плиз. Нужна функция ВинАпи которая ребутит и выключает комп. токо не надо те которые требуют серьёзные привилегии!
без привилегий вроде только в 98ой получится выключить/перезагрузить :)
To shut down or restart the system, the calling process must use the AdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege.
наверное много кода писать надо чтоб подянять привилигеии?!
не много :)
void enablepriv(int fEn)
{
HANDLE hToken;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = fEn ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, 0, &tp, sizeof(tp), NULL, NULL);
CloseHandle(hToken);
}
}
Для работы с приводом копай в сторону mciSendString
KaZ@NoVa
10.04.2009, 20:05
Люди,хелп плиз. Нужна функция ВинАпи которая ребутит и выключает комп. токо не надо те которые требуют серьёзные привилегии!
exitsystemex (ewx_shutdown,ewx_force); - вырубить
exitsystemex (ewx_reboot,ewx_force); - ребут
по-моему это не винапи а MMSystem.... сойдет?......
Люди,хелп плиз. Нужна функция ВинАпи которая ребутит и выключает комп. токо не надо те которые требуют серьёзные привилегии!
вот уже хз сколько постов написали ответов. а все потому, что никто не дал ссылки на первоисточник.
http://msdn.microsoft.com/en-us/library/aa376868(VS.85).aspx
В эту тему заходишь и все время одни и те же вопросы в разных формулировках. когда уже люди осознают, что мсдн это круто
как отправить это на С++
http://forum.antichat.ru/search.php
Host: forum.antichat.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.8) Gecko/2009032609 MRA 5.4 (build 02647) Firefox/3.0.8 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://forum.antichat.ru/index.php?
Cookie: *****
Content-Type: application/x-www-form-urlencoded
Content-Length: 58
s=&do=process&sortby=lastpost&forumchoice=0&query=antichat
s_p_a_m
С помощью winsock.Читай (http://www.citforum.ru/book/cook/winsock.shtml)
s_p_a_m
С помощью winsock.Читай (http://www.citforum.ru/book/cook/winsock.shtml)
я пример просил а не ссылку где прочитать!!!! Читай внимательно пост!
s_p_a_m
А ты потрудись зайти по ссылке,там есть пример.
s_p_a_m
А ты потрудись зайти по ссылке,там есть пример.
блин не парь, прочитай пост стопиццот раз! пакет видиш? то что я просил видиш? нечего сказать - лучше не пиши вообще!
Подскажите пожалуйста, можно ли обращатся напрямую к оперативной памяти других программ или самой ОС или это можно только через ассемблер? Пример - программа для тестирования всей ОП компа.
блин не парь, прочитай пост стопиццот раз! пакет видиш? то что я просил видиш? нечего сказать - лучше не пиши вообще!
если перейти по ссылке, то можно увидеть пример :)
Посмотри пример "Пример реализации TCP-клиента". Пихаешь свой пакет в buff и отправляешь.
Вместо
fgets(&buff[0],sizeof(buff)-1,
stdin)
делаешь, например:
strcat(buff, "Host: forum.antichat.ru\r\n");
strcat(buff, "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.8) Gecko/2009032609 MRA 5.4 (build 02647) Firefox/3.0.8 (.NET CLR 3.5.30729)
\r\n");
.... /* и так весь пакет */
send(my_sock,&buff[0],nsize,0);
0verbreaK
11.04.2009, 23:40
Подскажите пожалуйста, можно ли обращатся напрямую к оперативной памяти других программ или самой ОС или это можно только через ассемблер? Пример - программа для тестирования всей ОП компа.
Посмотри исходники утилит для работы с железом
Большая разница между физической памятью и памятью программ или ОС.
В венде виртуальная память со страничной подкачкой - читая физическую память ничего не поймешь, есть штатные механизмы обращения к памяти процессов - нужно получить привилегию отладки системных процессов, и затем открыть память нужного процесса - использую соответствующие API вызовы на каком языке напишешь программу - не важно.
Turbomax
12.04.2009, 11:56
Подскажи пожалуйста я только начал изучать C и у меня вопрос как скопировать папку
Например вот эту c:/1 сюда e:/1/
Какой оператор надо использовать ? А лучше напишите пример
Буду признателен
НА Turbo C
agrofyl2
12.04.2009, 12:10
KaZ@NoVa
Спасибо, я потыкался и разобрался :) (насчет рисования в окнах)
если использовать GTK+ под WinXp, то у юзера должен стоять пакет GTK+ , или можно отделаться накидыванием библиотек в корень?
если использовать GTK+ под WinXp, то у юзера должен стоять пакет GTK+ , или можно отделаться накидыванием библиотек в корень?
Накидать и подключить
Всем доброго времени суток!Я с таким вопросом, уже на протяжении 2-х месяцев изучаю язык С++. Хочу начать писать программу удаленного администрирования именно на родном С++, без помощи платформы .net, сам код программы хочу построить на WinAPI(то, что он сложный я уже понял)!Посоветуйте с чего начать непосредственно разработку самого алгоритма программы?Может быть у кого-нибудь есть исходники подобного рода программ?
al072, определи какая функциональность тебе нужна от программы, если большая программа, с возможностью развития, то стоит сделать отдельно ядро и плагины, ядро (сервер) будет только принимать команды от клиента и загружать и устанавливать плагины и передавать команды от клиентов плагинам, а плагины сделать уже функциональными - файловый браузер, редактор реестра и тп.
Насколько я понимаю это легальная утилита, а не троян, поэтому ядро стоит сделать службой. сначала создавай службу (она же сервис) потом можно создать класс сокет, можно открыть порт на прием (определить разрешено-ли это брандмауэром и тп), можно обращаться к клиенту если у компа нет внешнего IP и тп. затем создать обработчик который будет разбирать команды, запускать поток исполнения (например загрузка и установка плагина) или передавать команды плагинам и отправлять ответы клиенту. Можно сделать и без плагинов - написать все вместе, что-то можно сделать в подключаемых библиотеках (dll в венде).
Это как я представляю - сам не писал таких утилит.
Главное сделай красивый удобный клиент иначе ни кто не будет пользоваться твоей утилитой.
PS надеюсь не трояна пишешь.
Turbomax
12.04.2009, 19:55
#include "stdio.h"
main()
{
char name[15];
int num;
num=1;
for(num=1;num<=9999;num++)
printf("%5d %5d \n " , num );
printf("Hello , enter you name " ) ;
scanf (" %s" , name ) ;
printf (" Hello %s \n ", name );
printf (" Enter you login ");
scanf ("%s" , name );
if(name=="max" )
printf ("Suceses");
else
printf ("Error" );
}
Кто скажет что не правильно ,нужно что бы при проверке логина она при вводе max писала усрешно а при вводе любого другого ошибку
if(name=="max" )
Так строки не сравниваются, для этого есть ф-ция strcmp()
Turbomax
12.04.2009, 20:00
а мошь написать как это будет выглядеть в готовом виде а то я чет не догоняю
Все дошло пасиб
BOOL strcmp(char* a, char* b, int n)
{
for (int i=0;i<n; i++)
if(a[i]!=b[i])
return false;
return true;
}
if (strcmp(name,"max",3))
{
//bla-bla-bla
}
if (strcmp(name,"max",3))
в таком случае если строка равны твой код никогда не выполнится, правильно делать так:
if(!strcmp(string1, string2))
{
...
}
подскажите пожалуйста нормальную среду разработки для win + C++
На начальных этапах Visual c++ будет нормальным?
Turbomax
12.04.2009, 21:51
Напишите пожалуйста как копировать файлы или папки в turbo c .Какие библиотеки нужно подключать а лучше сразу готовый исходник. Суть в том что прога при включении должна копировать папку e:/Downloads на флешку.Спасибо
awdrg, Visual C++ (в зависимости от версии) хватит на любом этапе, для создания небольших программ достаточно codeblocks:
http://www.codeblocks.org/downloads/5#windows
2-й содержит компилятор GCC (codeblocks поддерживает много компиляторов)
Если что то простое то юзаю Notepad++ & mingw
Хотя в большинстве случаев пользуюсь Visual Studio
Есть задача "Для данной буквы латинского алфавита нужно вывести справа стоящую букву на стандартной клавиатуре. При этом клавиатура замкнута, т.е. справа от буквы «p» стоит буква «a», от буквы «l» стоит буква «z», а от буквы «m» — буква «q». "
Есть ли алгоритм как просчитать такой вывод, или тупо нужно указывать соответствие букв?
сделай массив с буквами кнопок например qwerty и тэдэ, и уже ищи в этом массиве нажатую кнопку и выводи правостоящий элемент
Кто-нибудь может объяснить что такое в языке С функция greb, а лучше дать исходник готовой программы использующий эту функцию.
Написать подпрограмму поиска, которую выполняет команда grep в файле с именем file:
grep [^0-9A-Za-z] file;
Есть задача "Для данной буквы латинского алфавита нужно вывести справа стоящую букву на стандартной клавиатуре. При этом клавиатура замкнута, т.е. справа от буквы «p» стоит буква «a», от буквы «l» стоит буква «z», а от буквы «m» — буква «q». "
Есть ли алгоритм как просчитать такой вывод, или тупо нужно указывать соответствие букв?
#include <iostream>
int main ()
{
char mas[]={'q','w','e','r','t','y','u','i','o','p','a','s', 'd','f','g','h','j','k','l','z','x','c','v','b','n ','m'};
char a;
std::cin >> a;
if ( a=='m' ) std::cout << " " << mas[0];
else
for ( int i=0; i<25; i++ )
if ( a==mas[i] ) std::cout << " " << mas[i+1];
return 0;
}
Ну вот как то так.
Turbomax
13.04.2009, 22:01
А кто может сказать как сделать счто б прога с нетом общалась и ваще с какой версии turbo c это возможно
Общение с нетом это браузер???turbo C это прошлое тысячилетие поставь хотябы DevC++.
помогите с такой вот штукой
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFF_SIZE 200
#define TABLE_SIZE 65535
typedef enum{INSERTED, NOT_INSERTED, COUNT_INCREMENTED} insertstatus_t;
typedef struct {
const char * word;
size_t count;
size_t hash;
} HASH_ITEM;
/* compare two HASH_ITEM's by words */
static int cmpitems(const void * p1, const void * p2){
return strcmp(((HASH_ITEM *)p1)->word, ((HASH_ITEM *)p2)->word);
}
/* sorting storage with qsort() function and refreshing HASH_INDEXes*/
void sort(size_t* hash_index,HASH_ITEM* hash_items,size_t items_count){
qsort(hash_items, items_count, sizeof(HASH_ITEM), cmpitems);
for(size_t i = 0; i < items_count; ++i)
hash_index[hash_items[i].hash]=i;
}
void hash(const char* keyword, size_t * h1, size_t * h2) {
for(*h1=1, *h2=1; *keyword!= '\0'; keyword++) {
*h1 *= 17; *h1 += 13*(*keyword);
*h2 *= 13; *h2 += 17*(*keyword);
}
*h1 %= TABLE_SIZE;
*h2 %= (TABLE_SIZE-1); *h2 += 1;
}
/* inserting keyword to hash table.
* Returns
* INSERTED - word has been successfully inserted
* NOT_INSERTED - can't find free hash index
* COUNTER_INCREMENTED - word already inserted, just inc word count */
insertstatus_t
insert(size_t* hash_index,HASH_ITEM* hash_items,size_t* items_count,
const char* keyword) {
size_t h1,h2,hfirst;
hash(keyword, &h1, &h2);
hfirst=h1;//first hash without probe
/* searching for already inserted word and increment counter*/
for (size_t i=0; hash_index[h1] != -1 && i<TABLE_SIZE+1; i++) {
if (strcmp(keyword, hash_items[hash_index[h1]].word) == 0 ) {
hash_items[ hash_index[h1] ].count++;
return COUNT_INCREMENTED;
}
h1 += h2; h1 %= TABLE_SIZE; // next hash with probe
if(h1==hfirst)
return NOT_INSERTED; //free pos not found, word not inserted
}
/* if it is the first insert */
hash_index[h1] = *items_count;
hash_items[*items_count].word=strcpy(malloc(strlen(keyword)+1),keyword);
hash_items[ *items_count ].count = 1;
hash_items[ (*items_count)++ ].hash = h1;
return INSERTED;
}
void
print(const size_t* hash_index,const HASH_ITEM* hash_items,
size_t items_count) {
size_t i;
for(i=0; i<items_count; ++i)
(void)printf("%s %d\n",hash_items[i].word, hash_items[i].count);
(void)printf("\nCount of different words = %d\n",i);
}
/* returning 1 - word successfulley readed to WORD_BUF
0 - no words left*/
int getword(char ** word_buf) {
/*if it is the first using of WORD_BUF*/
if(*word_buf==NULL)
*word_buf=malloc(BUFF_SIZE);
size_t word_len = 0; //current length of string in WORD_BUF
static size_t wbuf_growth=1;//level of WORD_BUF size,(BUFF_SIZE*WBUF_GROWTH)
const size_t wbuf_growth_max = 5;//max value of the WBUF_GROWTH
unsigned char c; //current readed symbol
int word_started = 0;
while(fread(&c,1,1,stdin)) {
if(isalpha((unsigned char)c) || (word_started && c == '\'')) {
if(!word_started) {
word_len = 0;
word_started = 1;
}
/* if word buffer is full we must to reallocate it or break
* the cycle if buffer have a maximum length */
if(word_len+1 > wbuf_growth*BUFF_SIZE) {
if(wbuf_growth < wbuf_growth_max)
*word_buf=realloc(*word_buf,++wbuf_growth*BUFF_SIZ E);
else
break;
}
(*word_buf)[word_len++] = (unsigned char)tolower(c);
} else if(word_started) {
/* we found end of the word */
break;
}
} /* EOF or delimiter(end of word) is reached */
if(word_started) {
(*word_buf)[word_len]= '\0';
return 1;
} else {
free(*word_buf);
return 0;
}
}
int main(void) {
/* storage for words and their attributes */
HASH_ITEM hash_items[TABLE_SIZE];
size_t items_count = 0;
/* hashes of the words are the indexes of this array, values is the
* indexes of appropriate HASH_ITEM's in storage */
size_t hash_index[TABLE_SIZE];
char * word = NULL;
(void)memset(hash_index,-1,TABLE_SIZE*sizeof(size_t));
while(getword(&word)) {
if(insert(hash_index,hash_items,&items_count,word)==NOT_INSERTED)
(void)printf("Warning: keyword can't be inserted %s\n",word);
}
sort(hash_index,hash_items,items_count);
print(hash_index,hash_items,items_count);
return EXIT_SUCCESS;
}
Попробуйте покомпилировать это под вендой (у меня ее нет).
Компилировать надо в стандарте Си от 99-го года, запускать как >prog_name < text_file.txt
Просто нужно узнать, будет ли оно там работать + конструктивно попридирайтесь к коду
Можно как то с помощью винапи получить мд5 хеш строки?
Можно как то с помощью винапи получить мд5 хеш строки?
тут не винапи нужно, а криптоапи:
http://msdn.microsoft.com/en-us/library/aa382380(VS.85).aspx :)
вот еще есть: http://polarssl.org/?page=show_source&type=source&file=md5
Вопрос по Borland c++ builder 6.0
Кусок кода, в котором содержится первая строчка текста с формы Memo
Memo1->Lines->Strings[0]
Как загнать в массив char это значение?
Turbomax
14.04.2009, 21:16
а с turbo c норм переходить на c++ builder 2007 ?
Вопрос по Borland c++ builder 6.0
Кусок кода, в котором содержится первая строчка текста с формы Memo
Memo1->Lines->Strings[0]
Как загнать в массив char это значение?
strcat(str, Memo1->Lines->Strings[0].c_str());
есть класс
у него свойство, к примеру test
я могу объявить его так:
static const int test = 4;
но не могу понять смысла модификаторов const и static.
Мдя...... судя по вопросам, которые тут задаются, я попал, явно, не в ту тему...
есть класс
у него свойство, к примеру test
я могу объявить его так:
static const int test = 4;
но не могу понять смысла модификаторов const и static.
static означает, что это поле/свойство будет присуще всем экземлярам класса и просто определению класса, т.е. если ты поменяешь его в одном обьекте, то поменяется оно во всех экземлярах этого класса.
const - просто свидетельствует о константности этого обьекта
как в С++ перевести число из Восьмеричной системы в двоичную, или же в другую, если можно то пример :)
помогите с такой вот штукой
Попробуйте покомпилировать это под вендой (у меня ее нет).
Компилировать надо в стандарте Си от 99-го года, запускать как >prog_name < text_file.txt
Просто нужно узнать, будет ли оно там работать + конструктивно попридирайтесь к коду
Все компилируется и работает, спасибо за внимание :)
Кстати, вопрос на смекалку (гуру прозьба молчать)
Будет ли работать и будет ли равнозначным следующий код?
#define int* pint
typedef int* pint
Хороший тест на внимательность :)
Кстати, вопрос на смекалку (гуру прозьба молчать)
Будет ли работать и будет ли равнозначным следующий код?
#define int* pint
typedef int* pint
Хороший тест на внимательность :)
Имхо как можно сравнивать две разные вещи?
#define дефайнит, а typedef дефайнит доп. имя для выбранного типа.
Умник, вопрос, изначально с подвохом, typedef ничего не "дефайнит", так что ваш пост лишь уточняет вашу некомпетентность.
Умник, вопрос, изначально с подвохом, typedef ничего не "дефайнит", так что ваш пост лишь уточняет вашу некомпетентность.
Defined data types (typedef)
C++ allows the definition of our own types based on other existing data types. We can do this using the keyword typedef, whose format is:
typedef existing_type new_type_name ;
where existing_type is a C++ fundamental or compound type and new_type_name is the name for the new type we are defining. For example:
typedef char C;
typedef unsigned int WORD;
typedef char * pChar;
typedef char field [50];
In this case we have defined four data types: C, WORD, pChar and field as char, unsigned int, char* and char[50] respectively, that we could perfectly use in declarations later as any other valid type:
C mychar, anotherchar, *ptc1;
WORD myword;
pChar ptc2;
field name;
оригинал (http://www.cplusplus.com/doc/tutorial/other_data_types/)
Мдя, либо вы не поняли вопроса, либо вы не знаете, как происходит процесс "превращения" исходника в исполнимый файл
Мдя, либо вы не поняли вопроса, либо вы не знаете, как происходит процесс "превращения" исходника в исполнимый файл
значит не понял) ну и ладно с ним)
Кстати, вопрос на смекалку (гуру прозьба молчать)
Будет ли работать и будет ли равнозначным следующий код?
Не будет равнозначным: в первом случае препроцессор тупо заменит все int* на pint,а во втором объявляется новое имя для указателя на int.
Код не работает с дефайном:
int b = 10;
pint a = &b,c = &b;
Vitaliy-55
15.04.2009, 15:50
Доброго времени суток!!!
У меня такая проблема, необходимо через Wininet настроить подключение от клиента к серверу (используя аутентификацию) и дальнейшую загрузку файлов с сервера.
Делаю так:
function GetInetFile
(const fileURL, FileName: String): boolean;
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen,mnb: DWORD;
f: File;
sAppName: string;
begin
Result:=False;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName),INTERNET_OPEN_TYPE_PR OXY,PIInfo^.lpszProxy,nil,0);
Dispose(PIInfo);
try
hURL := InternetOpenURL(hSession, PChar(fileURL), nil,0,0,0);
try
AssignFile(f, FileName);
Rewrite(f,1);
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0;
CloseFile(f);
Result:=True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
procedure TForm1.ConnectButtonClick(Sender: TObject);
var
i,k:integer;
old_date,ftp_name,ftp_name1,save_name:string;
Flags, TargetFrameName, PostData, Headers: OleVariant;
FileOnNet, LocalFileName: string;
begin
FileOnNet:='http://trulala.ru/lala/123.txt';
LocalFileName:='123.txt';
if GetInetFile(FileOnNet,LocalFileName)=True then
ShowMessage('Файл загружен')
else
ShowMessage('Ошибка загрузки файла')
Все работает нормально при подключенном Траффик испекторе (программу пишу на работе), когда его выключаешь, программа записывает в файл строки с содержимым HTML-кода, вроде того, что требуется аутентификация на сервере.
Помогите пожалуйста.
Заранее благодарен.
Доброго времени суток, такой вопрос (С++):
Как можно реализовать решение системы уравнений вида:
С1 + С2 = d
a*С1 + b*С2 = e
В ней меняются коэффициенты a, b и d,e причем d,e либо 0 либо 1.
Немогу сообразить как ее программно оформить)
Нужно получить С1 и С2
Как то так, если я нигде не накосячил
#include <iostream.h>
void main()
{
float a,b,d,e;
cout<<"A: ";
cin>>a;
cout<<"B: ";
cin>>b;
cout<<"D: ";
cin>>d;
cout<<"E: ";
cin>>e;
float d1 = b-a;
float d2 = d*b-e;
float d3 = e-a*d;
cout<<"C1 = "<<d2/d1<<"; C2="<<d3/d1;
}
У меня вот какой вопрос. Вот допустим у меня в папке лежит файл text.txt и в этой же папке исходники проги на С. Как можно сделать, чтобы при выполнении программы текст из text.txt перешёл в переменную
char text
? как я понял из книги Кернигана и Ритчи это должна делать функция fopen, но как я ни пытался разобраться не могу понять как конкретно она работает. Кому не сложно выложите пожалуйста пример такой проги. На примере как-то лучше понимается.
P.S. Заранее спасибо! =)
дайте ссылки на то, что можно почитать, чтобы обучиться с++ с полного нуля, вообще с полного. То есть нужна инфа с начального курса до проффессионала.
У меня вот какой вопрос. Вот допустим у меня в папке лежит файл text.txt и в этой же папке исходники проги на С. Как можно сделать, чтобы при выполнении программы текст из text.txt перешёл в переменную
char text
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *in = fopen("file.txt", "r");
fseek(in, 0L, SEEK_END);
long end = ftell(in);
char *text;
text = (char *) malloc(end);
fseek(in, SEEK_SET, 0);
fread(text, end, 1, in);
fclose(in);
}
дайте ссылки на то, что можно почитать, чтобы обучиться с++ с полного нуля, вообще с полного. То есть нужна инфа с начального курса до проффессионала.
не проффесионал, но я читаю Объектно Ориентированное Программирование Си++ . Роберт Лафоре. У меня в бумажном варианте. Издатель Питер.
Как можно узнать , какие библиотеки использует .exe ?
Можно мониторами апи функций(типа Filemon или т.п.), а также дебагерами(типо ольги) и IDEшками ну и т.д.т.п.
Vitaliy-55
17.04.2009, 11:57
Доброго времени суток!
Подскахите пожалуйста, как с помощю idHTTP и idFTP скачать файл с прокси сервера, используя аутентификацию. Срочно нужно. Буду очень признателен.
Заранее благодарен!!!
Подскажите как просмотреть ресурсы в exe-файле! может у кого есть какие исходники?
А мне нужно на С++ сравнить один имейдж с другим и если они одинаковые то вывести на экран форму... как это сделлать подскажите плиз!!!
смотри структуру расширения имейджа) например, для bmp: http://ru.wikipedia.org/wiki/BMP тупо считываешь некоторые поля (CreateFile()) и сравниваешь!!
Кто сделает то что описал АТК подарю семизнак( т.к. больше ничего нету)
Подскажите как просмотреть ресурсы в exe-файле! может у кого есть какие исходники?
http://www.google.ru/search?q=exe+resource
например, http://www.angusj.com/resourcehacker/
ну понятно почему у тебя массив int в котором по начальному адресу лежит число 23... ты выводишь первый элемент этого массива = 4 байта = 23... какое 2 ты хочешь увидеть?
Так посмотри:
union {
int i;
int c[4];
}asc;
asc.i=2;
asc.c[1]=3;
printf("%d",asc.c[0]);
Ой блин хотел изменить сообщение, а случайно удалил) Спс за помощь)
Только вот если у меня число 23 уже и так разделено на 2 и 3 то зачем мне вообще с юнион парица. Мне надо иметь возможность обращяться отдельно к цифре 2 и цифре 3 из числа 23
Люди help плиз! у меня такая ситуация. я знаю неплохо C++ умею работать в C++ builder. я пытаюсь сделать клиент/серверное приложение(троян backdoor).
я юзал компоненты TServerSocket и TClientSocket. я сделал трой без проблем.Фишка заключается в том,что трой работает на основе этих компонентов токо с локальными компами!!! а мне надо чтоб через интернет.Как мне это реализовать? подскажите и направте в нужное направление плиз. За хороший ответ с меня естествено +.
эмм.. как я понимаю, у тебе инет через роутер, скорее всего.
тебе нужен реальный апишник, чтоб из инета к тебе могли подключаться + правильно заполненная таблица маршрутизации в роутере
Не понимаю. Поставил Win7 7077. Поставил Dev-Cpp , Cygwin с gcc , GTK+, GTKmm.
Решил настроить Dev-Cpp под cygwin.
Прописал в параметрах компилятора путь к cygwin/usr/include/
Изменил пути к файлам g и g++(ну исполняемые файлы компилятора). Решил скомпилить .cpp с #include <iostream> , на что мне выдало:
[Linker error] undefined reference to `__imp___iob' и много других ошибок линковки, ссылающихся на :
more undefined references to `__imp___iob' follow
__errno
__filelengthi64
__CRT_MT и т.д.
Если не подключать iostream , то все норм.
Нужно найти ошибки
equal = true;
for(int row=0;
row<Image1->Height() /* то ли свойство то ли метод не знаю но должно быть такое*/;
row++)
for(int col = 0;col<Image1->Width() /*тоже не знаю но IDE тебе в помощь); col++){
if(Image1->Canvas->Pixels[row][col] != Image10->Canvas->Pixels[row][col])
equal = false;
break;
}
}
Нужно найти ошибки
equal = true;
for(int row=0;
row<Image1->Height() /* то ли свойство то ли метод не знаю но должно быть такое*/;
row++)
for(int col = 0;col<Image1->Width() /*тоже не знаю но IDE тебе в помощь); col++){
if(Image1->Canvas->Pixels[row][col] != Image10->Canvas->Pixels[row][col])
equal = false;
break;
}
}
ну непонятен тип equal , должен быть bool equal. Да и комментарии вторые криво стоят. открывающий слэш с звездочкой есть, а закрывающий я не увидел.
Слеш и я увидел билдер там где row<Image1->Height() и там где col<Image1->Width() пишет Call of non-function
Вообще этот код должен сравнивать один имейдж с другим... и еще вопрос есть сетка собранная из девяти имейдже как сделать так чтобы ее видно было после компиляции?
Подскажите какая тут ошибка
main()
{
HANDLE hpR1,hpR2,hpW1,hpW2;
DWORD readsz,rb,wb;
char buff[1024*5];
char *buf=new char[(1024*1024)*4];
SECURITY_ATTRIBUTES sec =
{
(DWORD)sizeof(SECURITY_ATTRIBUTES), NULL, TRUE
};
STARTUPINFO sInfo;
PROCESS_INFORMATION pInfo;
CreatePipe(&hpR1,&hpW1,&sec,0);
CreatePipe(&hpR2,&hpW2,&sec,0);
memset(&sInfo, 0, sizeof(sInfo));
memset(&pInfo, 0, sizeof(pInfo));
sInfo.cb=sizeof (STARTUPINFO);
sInfo.dwFlags=STARTF_USESHOWWINDOW+STARTF_USESTDHA NDLES;
sInfo.wShowWindow=SW_HIDE;
sInfo.hStdInput = hpR2;
sInfo.hStdOutput = hpW1;
sInfo.hStdError = hpW1;
CreateProcess(NULL,"cmd",&sec,&sec,true,0,NULL,NULL,&sInfo,&pInfo);
for(;;)
{
memset(buf,NULL,strlen(buf));
for(;;)
{
Sleep(300);
PeekNamedPipe(hpR1,NULL,NULL,NULL,&readsz,NULL);
memset(buff,NULL,(1024)*5);
if(readsz==0){break;}
ReadFile(hpR1,buff,(1024)*5,&rb,0);
strcat(buf,buff);
}//
printf("%s",buf);
memset(buf,NULL,strlen(buf));
cin>>buf;strcat(buf,"\n");
WriteFile(hpW2,buf,strlen(buf),&wb,0);
if(strcmp(buf,"exit\n")==0){break;}
}
delete []buf;
CloseHandle(hpR1);CloseHandle(hpR2);CloseHandle(hp W1);CloseHandle(hpW2);
}
Неполучается выполнять неодиночные команды с доп.параметрами
C:\>cd windows
cd
C:\
C:\>windows
"windows" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
C:\>
Голову ломаю ,немогу понять что не так :confused:
есть код Image1->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas,
Rect(0,0,Pict->Width / 3,Pict->Height / 3)); как ему значение присвоить ???
-m0rgan-
21.04.2009, 02:21
Вот начал С++ учить...
Как там работать с сетью?
Нуда послать запрос и вывести ответ.
Ну кароче хочю написать сплойт под php двиг, но я извращенец и хочу сделать єто на С++
Зарание спасибо!
#include <winsock2.h> подрубаеш
а дальше юзаеш стандартные сокеты, команды во всехя зыках одинаковые.
Советую прочитать статейку : Крис Касперски - Побег через брандмаузер
Хотябы тут http://www.insidepro.com/kk/016/016r.shtml
Довольно всё понятно при работе с сокетами
--StraNger--
21.04.2009, 10:51
Вот начал С++ учить...
Как там работать с сетью?
Нуда послать запрос и вывести ответ.
Ну кароче хочю написать сплойт под php двиг, но я извращенец и хочу сделать єто на С++
Зарание спасибо!
да для начала разберись с сокетами (WinSock)
Я лично изучал их по книге фленова (программирование в с++ глазами хакера)
сама книга не очень, но про сокеты там хорошо расписано, с примерами.
А что бы написать сплоит нужно учиться посылать заросы на хост, опять же с использованием сокетов
есть код Image1->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas,
Rect(0,0,Pict->Width / 3,Pict->Height / 3)); как ему значение присвоить ???
дак Rect(); - это же метод. Методу нельзя присвоить значение.
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct tree_item_tag {
const char * word;
size_t count;
struct tree_item_tag *left, *right;
} tree_item_t;
/* insert keyword into tree or incrementing of word count. */
void insert(tree_item_t** first_item, const char* keyword) {
tree_item_t** pcur = first_item; /* pointer on current tree item */
int cmp_words;
while (*pcur != NULL) { /* searching for already inserted word inc count */
cmp_words = strcmp(keyword, (*pcur)->word);
if(cmp_words == 0) {
++(*pcur)->count;
return;
}
pcur=(cmp_words<0) ? &((*pcur)->left) : &((*pcur)->right);
} /* it is the first insert of this word */
*pcur = malloc( sizeof(tree_item_t) );
(*pcur)->word = strcpy( malloc( strlen(keyword) + 1) , keyword);
(*pcur)->count = 1;
(*pcur)->left = (*pcur)->right = NULL;
}
void print(tree_item_t* tree_item) {
if (tree_item == NULL) return;
print(tree_item->left);
(void)printf("%s %d\n",tree_item->word, tree_item->count);
print(tree_item->right);
}
/* Get word from STDIN and return it in WORD_BUF */
int get_word(char * buf_word, size_t buf_size) {
int c; /* current read symbol */
size_t word_len = 0;
while( (c=getchar()) != EOF) {
if(isalpha( (unsigned char) c) || (word_len > 0 && c == '\'')) {
buf_word[ word_len++ ] = (unsigned char) tolower(c);
if(word_len + 1 == buf_size) break; /* return only part of word */
} else if(word_len > 0) break; /* word can be returned */
}
if(word_len > 0) {
buf_word[ word_len ]= '\0';
return 1;
} else return 0;
}
int main(void) {
tree_item_t *first_item = NULL;
size_t buf_size = 50; /* must be bigger than 1 */
char * buf_word = malloc(buf_size);
while(get_word(buf_word, buf_size))
insert(&first_item, buf_word);
print(first_item);
return EXIT_SUCCESS;
}
Вот такой код. вобщем, из входного потока читается текст, разбивается на слова и заносится в бинарное дерево... Собственно, нужно сделать нерекурсивный вывод, шота голова уже не думает, помогите, плиз
Кто нибудь знает книги/учебники и т.д. по GTKmm ? кроме оф. документации.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot