PDA

Просмотр полной версии : [c/c++] Новичкам: задаем вопросы


Страницы : [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

_Great_
26.05.2007, 14:21
В этой специальной теме новички могут задавать "элементарные" вопросы по синтаксису и прочим начинаниям в языке.

N1K
27.05.2007, 17:58
Как заставить программу читая файл скрадывакать каждую строку в определенную переменную? (1 строка = 1 переменная)

_Great_
27.05.2007, 18:02
Как заставить программу читая файл скрадывакать каждую строку в определенную переменную? (1 строка = 1 переменная)
fgets() читает строчку из файла, если используется RTL у тебя

_Great_
27.05.2007, 18:16
27.05.2007 18:14:51, KEZ
KEZ:


#include <stdio.h>

int main(int argc, char* argv[])
{
char buf[256];
FILE *f = fopen( "C:\\1.txt", "r" );
while (fgets( buf, 255, f ))
strncpy( string, buf, 255 );
fclose( f );

return 0;
}

где string - очередная переменная в которую положится очередная строка

27.05.2007 18:15:00, KEZ
запости *** я забанен(

ultimatum
27.05.2007, 18:31
Как программно с помощью с++ обращаться по протоколу http. Как к простым файлам?
пример:
FILE *f = fopen( "http://sait.com", "r" );
может вопрос мой некоректен , но я думаю поймут )))

_Great_
27.05.2007, 18:34
Как программно с помощью с++ обращаться по протоколу http. Как к простым файлам?
пример:
FILE *f = fopen( "http://sait.com", "r" );
может вопрос мой некоректен , но я думаю поймут )))
нет, либо UrlDownloadToFile, либо открыть сокет вручную

от кеза:

27.05.2007 18:43:17, KEZ

#include <stdio.h>
#include <winsock2.h> // хедер с описанием wsa ф-ий

// для ms vc++6.0 и др - подключаем lib'у с импортами wsa ф-ий
#pragma comment( lib, "wsock32.lib" )

int main(int argc, char* argv[])
{
char request[1024*5]; // буффер под запрос
char response[1024]; // буффер под ответ
sockaddr_in s_a;
WSADATA wd; // структура WSADATA

WSAStartup( MAKEWORD( 2, 2 ), &wd ); // инициализируем wsa

SOCKET s = socket( AF_INET, SOCK_STREAM, 0 ); // создаем сокет
if (s == INVALID_SOCKET) return 255; // если ошибка - выход

s_a.sin_addr.s_addr = inet_addr( "89.108.80.80" ); // айпи сервера, в данном случае - античат.ру
s_a.sin_port = htons( 80 ); // порт сервера
s_a.sin_family = AF_INET;

if (connect( s, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR) return 255; // SOCKET_ERROR - невозможно подключится к сереверу

char url[] = "/"; // страница
char host[] = "antichat.ru"; // хост
// формируем запрос
sprintf( request, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: Close\r\n\r\n", url, host );

send( s, request, strlen( request ), 0 ); // послать запрос
recv( s, response, 1023, 0 ); // максимум получить 1023 байта

printf( "%s\r\n", response ); // вывести ответ на экран

closesocket( s ); // закрываем сокет
WSACleanup(); // деинициализируем wsa

return 0;
}

27.05.2007 18:45:56, KEZ
отпиши от меня кроме кода вот что

27.05.2007 18:46:28, KEZ
"далее обрезай шапку ответа сервера (HTTP/1.1 200 OK и т.п.), все оставшееся - будет то, что вернул сервер по запрошеному адресу, например /1.txt. Другие варианты с winapi - InternetReadFile(), UrlDownloadToFile() см.
msdn..."

27.05.2007 18:45:09, KEZ
"альт. вариант - InternetReadFile()"

27.05.2007 18:45:12, KEZ
отпиши

ultimatum
27.05.2007, 19:00
спасибо KEZ и _Great_ ))) дальше я сам поисом

N1K
27.05.2007, 19:15
27.05.2007 18:14:51, KEZ
KEZ:


#include <stdio.h>

int main(int argc, char* argv[])
{
char buf[256];
FILE *f = fopen( "C:\\1.txt", "r" );
while (fgets( buf, 255, f ))
strncpy( string, buf, 255 );
fclose( f );

return 0;
}

где string - очередная переменная в которую положится очередная строка

27.05.2007 18:15:00, KEZ
запости *** я забанен(

Короче, смысл проги в том, что... а, ладно щас исходник кину:




#include <stdio.h>
#include <stdafx.h>
#include <iostream>
#include <string.h>
using namespace std;

class massive_s
{
public:
massive_s (char*, int, float);
void show_data (void);

/* void fetch (int); */
private:
char name[64];
int marck;
float m_marck;
};
massive_s::massive_s (char *name, int marck, float m_marck)
{
strcpy (massive_s::name,name);
massive_s::marck = marck;
massive_s::m_marck = m_marck;
if (m_marck > 3.5)
strcat (massive_s::name," IIEPEBEDEH");
else
strcat (massive_s::name," HE IIEPEBEDEH");
}
void massive_s::show_data (void)
{
cout <<" Name: "<< name << endl;
cout <<" Ocenka: "<< marck << endl;
cout <<" Cpednjaja ocenka: " << m_marck << endl;
}





int main (void)
{

/* здесь нужен код, который считывал бы из вайла построчно переменные, и формировал запрос в конструктор типа:
massive_s w1(string1, int1, float1); где стринг, интеджер и флоат - вытащенные из файла переменные (стринг - первая строка, интеджер - 2 и флоат - 3, причем в файле продобных строк 100 (т.е. они чередуюццо:
Вася Пупкин
1
3.3
Миша Ипачевский-Распиндосов
4
4.5
Саша шнуровской
5
3.5
)
*/
}

Jes
30.05.2007, 17:37
Вопрос: idHTTPServer ... сохранение удаленного файла на винте(через браузер)...
TFileStream *fs=new TFileStream(MyFile,fmOpenRead);
try
{
ResponseInfo->ResponseNo=200;
ResponseInfo->ContentLength= fs->Size;
ResponseInfo->ContentStream=fs;
ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n");
...
Сохраняет файл , но в начале файла записывает инфо с запроса (Server: Indy, Content-Length и др) , что в свою очредь убивает его работоспособность...
как сделать ,чтоб файл нормально записался???

Jes
30.05.2007, 23:12
у меня немного по сложнее трабл , я отсылаю файл по запросу, а не принимаю ...
Принимает же обычный браузер...

считываю же файл для отправки сразу потоком:

TFileStream *fs=new TFileStream(MyFile,fmOpenRead);
ResponseInfo->ContentStream=fs; //где ResponseInfo - ответ на запрос...

забавно, но если убрать строчку :
ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n");
, то файл сохранится правильно, но под кривым именем и без расширения...

Jes
31.05.2007, 02:07
... и опять я сам во всем разобрался ,
строка ResponseInfo->Headers->Add("Content-Disposition: attachment; filename=MyFile.exe\r\n"); при добавке первого нового хедера сама формирует остальные , причем вырезать их никак...
Выход нашел в такой же степени дурацкий, в какой и гениальной:
в к Content-type прибавляем свою строку с пробелами...(тоесть не используем метод Headers->Add)

ResponseInfo->ContentType=IdHTTPServer1->MIMETable->GetFileMIMEType(MyFile) + "\r\nContent-Disposition: attachment; filename=" + MyFile;

при этом никаких символов новых строк в конце, иначе они запишутся в отсылаемый файл...
...блин , пол вечера убил на это...

NetMan
12.06.2007, 18:24
sys32, Tools -> Options -> Directories, выбери Executable Files, cl.exe должен находиться в одной из директорий, если нет, то укажи её.

Ky3bMu4
19.06.2007, 13:11
Вот такой вот вопросик возник:
Нужно динамически выделить память. Но, без всяких malloc, calloc , new и т.д. Вот.

Joker-jar
19.06.2007, 14:32
Смотри:
#include "vcl.h"
#include "stdio.h"

DynamicArray <int> massiv; //Динамический массив

int main()
{
massiv.set_length(10); //Устанавливаем размер массива
for (int i = 0; i < massiv.Length; i++)
{
massiv[i] = i;
printf("%d ",massiv[i]);
}
getchar();
}

_Great_
19.06.2007, 15:04
Нужно динамически выделить память. Но, без всяких malloc, calloc , new и т.д. Вот.
А как тогда?

Joker-jar, лол, а если VCL нету?

Ky3bMu4
19.06.2007, 15:09
Если я не ошибаюсь, есть Api функция.

Joker-jar
19.06.2007, 15:30
Я показал, как сделать это максимально абстрактно... Если и это не то, то хз.
Но, без всяких malloc, calloc , new и т.д
Действительно, а как тогда? Это основные методы, чем они так не устраивают? Если возникают сложности, переходи на Делфи, там с этим на порядок легче (SetLength и попер)

sni4ok
19.06.2007, 15:44
А как тогда?

Joker-jar, лол, а если VCL нету?

наверно он не знает, что в с++ есть стандартные контейнеры, поэтому и предлагает всякое платформа-зависимое дерьмо. :(

_Great_
19.06.2007, 15:50
sni4ok, возможно =) ну это не дерьмо, когда нужно писать системные проги, просто оно нужно для другого.

зы. только это не часть С++, это stl. большая разница

Joker-jar
19.06.2007, 15:58
Какие проблемы? Можно писать с vcl, можно без (третьего не дано, из теории вероятности А + не А = 1). Если проект использует vcl, почему бы не воспользоваться достаточно удобным способом создания динамических массивов любого типа данных (нужно, кстати, подключить sysdyn.h)? Если прога консольно, то ясен пень подключать vcl.h смысла нет. Написал для примера

_Great_
19.06.2007, 16:05
Stl в любой нормальный компилер входит.
А ты уверен что твой Vcl скомпилится в любом компилере просто так? Его еще сливать отдельно надо.
Я тоже могу написать супер-пупер библиотеку. А смысл? В Stl есть все, что нужно. Ну, или почти всё.

nerezus
19.06.2007, 18:59
зы. только это не часть С++, это stl. большая разница Только это не часть собаки, а ее ухо. Это большая разница.

С каких пор STL перестал быть частью C++?

Если проект использует vcl, почему бы не воспользоваться достаточно удобным способом создания динамических массивов любого типа данных Если удобнее юзать STL -юзай его. Если VCL - то VCL. Ты уверен, что тебе удобнее именно VCL?

_Great_
19.06.2007, 19:24
с каким пор вещь, сделанная на инструменте, является частью инструмента?

хотя отчасти это и часть С++... вообщем тавтология какаято )

nerezus
19.06.2007, 19:26
с каким пор вещь, сделанная на инструменте, является частью инструмента? Т.е. если я сырцы компилера скомпилю этим же компилером, то он перестанет быть компилером? )) Это типа пример.
А Stl — часть C++

Great: Часть, не часть - спорить бесполезно =) Ладно, заканчиваем оффтоп :)

bxN5
19.06.2007, 20:58
wtf системные переменные дайте почитать!

sni4ok
19.06.2007, 21:42
с каким пор вещь, сделанная на инструменте, является частью инструмента?


язык это то, что описано в стандарте, а в стандарте stl описан, поэтому я солидарен с nerezus'ом.
ну а инструментом уже можно считать отдлельные реализации c++, такие как microsoft, borland, gcc и пр.
при этом чтобы инструмент имел в названии слово "с++" обязан поддерживать stl.

scrat
19.06.2007, 21:55
что такое препроцессор и метапрограммирование?
в какой переменной лежит длинна строки(класс string)?
как построчно читать файл в вектор до конца файла(библиотека fstream)?
как работать с tcp/ip в с++?

nerezus
19.06.2007, 22:17
как работать с tcp/ip в с++? Никак. Только с помощью средств ОС либо либ или фреймворков.

в какой переменной лежит длинна строки(класс string)? Например _M_length типа size_type структуры _Rep_base класса basic_string. Это зависит от реализации. И вообще тупой вопрос. Юзай метод length().

_Great_
19.06.2007, 22:24
что такое препроцессор и метапрограммирование?
Это откровенный словарный ворпос. go 2 wiki
как работать с tcp/ip в с++?
Тебе стоит прочитать про сокеты
В двух словах:
socket создает сокет, connect соединяется с хостом, send/recv отправляет/получает данные.

scrat
19.06.2007, 22:41
Это откровенный словарный ворпос. go 2 wiki

в вики есть слово триграф которого нет в вики.что это?

slesh
19.06.2007, 22:59
ну юзай тогда API функцию - VirtualAlloc

_Great_
20.06.2007, 10:33
Тема разделена. Триграфы в C/C++ (https://forum.antichat.ru/showthread.php?t=42659)

Joker-jar
20.06.2007, 18:38
Как в Turbo C определить ширину экрана, но не в точках, а в символах. Грубо говоря, как узнать максимальную длину строки, которая может поместиться на экране без переноса.

_Great_
20.06.2007, 18:39
Получить параметры видеорежима через прерывание Bios'а номер 10 (если под досом)

Ky3bMu4
21.06.2007, 18:21
Разобрался с malloc`ом.
http://www.codenet.ru/progr/visualc/esmall/add.txt
Мож кому пригодится.

scrat
24.06.2007, 16:52
более-менее выучил с++ какой api учить?

iv.
24.06.2007, 17:25
Как в Turbo C определить ширину экрана, но не в точках, а в символах. Грубо говоря, как узнать максимальную длину строки, которая может поместиться на экране без переноса.
Ассемблерной вставкой можно узнать текущий видеорежим:

mov AH, 0Fh
int 10h

Тогда в AL будет номер режима. Но нафик это тебе? Текстовых режима по размерам всего два: 25*40 и 25*80. Поэтому в любом случае количество символов на одной строке - 25 (обычно, если ты конечно не будешь извращаться с текстом в графическом режиме - тут уже только прямым посчетом).

ZaCo
24.06.2007, 17:44
2scrat программируешь под win32 - winapi32, под юникс-системы posix, systemv и т.п. но первого я думаю хватит...

_Great_
24.06.2007, 17:44
более-менее выучил с++ какой api учить?
Не ясен вопрос.

scrat
24.06.2007, 17:51
2scrat программируешь под win32 - winapi32, под юникс-системы posix, systemv и т.п. но первого я думаю хватит...
posix=сишник.мне хочеться выучить чисто плюсовый апи.но всё-же курс позикса на интуите почту

ZaCo
24.06.2007, 18:00
>>чисто плюсовый апи
что ты понимаешь под апи? я так понял, что тебе нужен набор системных подпрограмм стандарта какого-то, но если говорить совсем уж грубо функция-подпрограмма всего лишь адрес и причем здесь язык c, c++ и тем более чистый c++ я не знаю.

GoreMaster
24.06.2007, 18:19
>>чисто плюсовый апи
Stl учи
Хотя я хз че-такое "чисто плюсоый апи" :confused:

_Great_
25.06.2007, 11:14
posix=сишник
Яблоки=коровы.
>>чисто плюсовый апи
Stl учи
STL это не апи.
мне хочеться выучить чисто плюсовый апи.
API "плюсовым" в винде не бывает (ну если не считать премудростей Component Object Model), в никсах тоже.

API - он один для каждой системы, тебе стоит посмотреть в словаре определение, что есть API (Application Programming Interface)

Joker-jar
01.07.2007, 06:29
Как в Turbo C определить ширину экрана, но не в точках, а в символах. Грубо говоря, как узнать максимальную длину строки, которая может поместиться на экране без переноса.
Получить параметры видеорежима через прерывание Bios'а номер 10 (если под досом)
Регистры надо чем-то заполнять? И в каком будет содержаться результат?

iv.
01.07.2007, 10:56
Регистры надо чем-то заполнять? И в каком будет содержаться результат?
Я тебе ответил на этот вопрос. Сообщение номер 39.

Prod
03.07.2007, 16:57
Создаю объект Tree View:
HWND hwndTreeView;

InitCommonControls();

hwndTreeView = CreateWindowEx(0,
WC_TREEVIEW,
"Tree View",
WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_HASLINES,
0,
0,
100,
100,
hwnd,
(HMENU)ID_TREEVIEW,
hThisInstance,
NULL);
Компилятор ругаеться:
.objs\main.o:main.cpp:(.text+0x11a): undefined reference to `InitCommonControls@0'
collect2: ld returned 1 exit status

Пример создания брал отсюда: _http://msdn2.microsoft.com/en-us/library/ms650020.aspx

big_BRAT
06.07.2007, 00:16
Возможно вопрос не по адрессу, но всё же. Имеется cgi скрипт написан на С, скрипт принимает разные параметры через get (скрипт работает на apache 1.33 freebsd 6.2 /может играет роль/)
так вот у меня вопрос, возможно или переполнить бувер в таком скпирте, ведь как я понимаю то это таже откомпилированная "программа", и как я успел прочитать "Скрипт на языке C ничем не отличается от обычной C-программы. Собственно, это набор процедур, среди которых есть главная процедура. Этой главной процедуре передается управление при загрузке программы в оперативную память.", на основании сего я и сделал свой вывод. Если ответ положительный то возможно датите ссылки где про это можно почитать, зарание спасибо))

sni4ok
06.07.2007, 01:20
так вот у меня вопрос, возможно или переполнить бувер в таком скпирте

может ты исходник скрипта для начала приведёшь?

big_BRAT
06.07.2007, 14:15
кому интересно посмотреть выложил файл /по поводу cgi on c/
http://files-upload.com/352662/file.tar.gz.html

da_ff
06.07.2007, 23:58
wasm.ru там полно про разного рода пернполнения буфера

Alexsize
13.07.2007, 10:10
Вопрос по Visual Studio 2005. Консольное приложение.
Приведу простейший пример с ошибкой, устранить которую я не могу:

#include "stdafx.h"
#include "stdio.h"
main()
{
printf("Hello World!\n");
}

Сама ошибка :

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Встречаеться мне постоянно. Как бороться я не пойму. В других IDE все работало нормально. Раньше юзал Borland. Там такого не было...

Ch3ck
13.07.2007, 11:53
Может так? ;)

#include <stdio.h>
int main()
{
printf("Hello World!\n");
}

Alexsize
13.07.2007, 12:02
Все. Спасибо!

KEZ
13.07.2007, 16:54
вообще, так


#include <stdio.h>

int main( int argc, char *argv[] )
{
printf("Hello World!\n");
}

Ni0x
13.07.2007, 17:10
ну если уж по всем правилам, то так:
#include <stdio.h>

int main( int argc, char *argv[] )
{
printf("Hello World!\n");
return 0;
}

tclover
13.07.2007, 17:15
Потому что в c int по умолчанию, а c++ нет =\

PS

#include <cstdio>
#include <string.h>
#include <cstdlib>
#define S "Hello, World\n"
int main(){exit(printf(S) == strlen(S) ? 0 : 1);}

:)

KSURi
13.07.2007, 17:28
вообще, так
а если он не хочет передавать аргументы из командной строки?

KEZ
13.07.2007, 18:58
И что? Это не значит что есть смысл определять как просто main()

Вообще, эти правила очень неконкретные и смазаные - можно использовать любую ф-ию как точку входа...

nerezus
13.07.2007, 19:54
Потому что в c int по умолчанию хуюшки =)

ISO 9899 6.7.2 "At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each struct declaration and type name."

tclover
13.07.2007, 20:31
http://img248.imageshack.us/img248/7327/cppwf9.jpg и всё такое)

tbody
20.07.2007, 03:46
Где можно взять русский хелп и список операторов, функций для Turbo C++ Explorer Edition 2006?

nerezus
20.07.2007, 09:23
Где можно взять русский хелп и список операторов, функций для Turbo C++ Explorer Edition 2006?
нигде.

GlOFF
20.07.2007, 14:13
tbody Русским врядли, а так лучше возьми C++ от MS и справкой по функциям пользуйся на msdn.com :)

tbody
20.07.2007, 15:45
Да во встроенной справке черт ногу сломит, я там искал функци записи-чтения файлов, так нихрена и не понял. Фишка в том, что там собрано куча всякой херни и все это свалено вместе и понять что откуда просто невозможно.

Ch3ck
20.07.2007, 16:01
Книжек, примеров, документаций море в нете...

KEZ
20.07.2007, 16:06
ну не суть значит понять что же делать (

tclover
20.07.2007, 16:11
как вариант, перестать читать хэкерские стотьи, авторы которых сами ничего не знают зачастую и прочитать нормальную книжку по си++, например Джесс Либерти

f04c3
21.07.2007, 04:32
to ->> tclover неа не то )) по книжкам учат тока одни боты )) можна учить, читать зубрить )) но все это не то, надо просто понимать суть процесса некоторые авторы (еденицы) могут осуществлять тот или иной механизм. Я не говорю что в книгах ничего нету я про то что многое зависит от самого себя )Книжки это тока наводка (указатель) на этот процесс )

f04c3
21.07.2007, 05:17
--> invlose а это тебе ведней. Я говорил что тока некоторые кижки нормальные если были нормально написаные то вопросов бы не было. А на счет ботов я говорю просто по себе 3наю но бывают исключение (редко) извини могу ошыбатся )

da_ff
21.07.2007, 12:37
2 f04c3 убейся нахер
хотя нет если ты телепат и можешь пронкать в мысли других людей то ты спаситель человечества и последняя наша надежда а нам простым смертным приходится узнавать про новые технологии и архитектуры ос постаринке из статей и книжек

f04c3
21.07.2007, 14:06
--> da_ff ты так не нервничай )

Vorlan
21.07.2007, 17:28
простите за глупый вопрос, но у меня не получается компилировать, не объясните?

Ni0x
21.07.2007, 17:31
простите за глупый вопрос, но у меня не получается компилировать, не объясните?
потяни за рычажок. напиши сначала подробнее что за компилятор и тд.

tclover
21.07.2007, 17:35
простите за глупый вопрос, но у меня не получается компилировать, не объясните?


http://www.delorie.com/djgpp/compile/
сконпелируй онлайн.

Vorlan
21.07.2007, 17:50
Bcc55 мой компилятор, попробовал через командную строку и получилось вот это
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
sample.cpp:
Error E2209 sample.cpp 1: Unable to open include file 'iostream'
Error E2282 sample.cpp 2: Namespace name expected
Error E2451 sample.cpp 6: Undefined symbol 'cout' in function main()
*** 3 errors in Compile ***
А исходный код такой
#include <iostream>
using namespace std;

int main ()
{
cout << "C++-программирование - это сила!";


return 0;
} Я не понимаю почему он не находит "iostream" хотя он есть в папке include

tclover
21.07.2007, 17:52
напиши #include <iostream.h>
и убери вторую строчку про нэйспейс.
и скачай потом конпелятор поновее [привет nerezus]

Vorlan
21.07.2007, 17:56
Ладно компилятор поищу, видно мой совсем тупой, что даже не понимает простейших команд

tclover
21.07.2007, 18:02
да нет же =\
Просто стандарты стали новыми, а компилятор остался старым.

da_ff
21.07.2007, 18:38
если убрать обьявление области имен то компилятор будет ругаться на cin и cout и еще либо тиши на латинице слова либо используй CharToOem

char c[100];
CharToOem("C++-программирование - это сила!",c);

Vorlan
22.07.2007, 20:06
Скачал компилятор DEv-C++ он тоже мозг е**т никакой код не компилирует совсем не знаю прям что и делать новый искать или в нем надо еще что-то настраивать?

iv.
22.07.2007, 20:14
Скачал компилятор DEv-C++
Это среда разработки, а компилятор там MinGW. Ппц, нормальными компилями не пробовал пользоваться?

никакой код не компилирует совсем
Пример кода + ошибки в студию.

Vorlan
22.07.2007, 20:17
Вот код

#include <iostream.h>


int main()
{
cout << "C++-программирование - это сила!";

return 0;
}

iv.
22.07.2007, 20:19
#include <iostream.h> -> #include <iostream>
using namespace std;

Vorlan
22.07.2007, 20:19
пользовался Borland 5.5, но он старый говорят, посоветовали поменять

Vorlan
22.07.2007, 20:20
#include <iostream.h> > #include <iostream.h>
using namespace std;
2 строку мне посоветовали вычеркнуть

iv.
22.07.2007, 20:21
Сори, я копипаст сделал забыл поправить =))
#include <iostream>

tclover
22.07.2007, 20:28
напиши конечный вариант, на котором ты остановился :)
например, если компилятор старый, то пиши
#include <iostream.h>
если новый, то
#include <iostream>
using namespace std;
а потом скачай Джесс Либерти "С++ за 21 день", издание поновее поищи только, и уже по ней учись.

Vorlan
22.07.2007, 21:04
напиши конечный вариант, на котором ты остановился :)
например, если компилятор старый, то пиши
#include <iostream.h>
если новый, то
#include <iostream>
using namespace std;
а потом скачай Джесс Либерти "С++ за 21 день", издание поновее поищи только, и уже по ней учись. Все равно ошибку пишет и ему почему-то Cout не нравится
C:\Borland\BCC55\Bin>Bcc32 sample.cpp
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
sample.cpp:
Error E2209 sample.cpp 1: Unable to open include file 'iostream.h'
Error E2451 sample.cpp 5: Undefined symbol 'cout' in function main()
*** 2 errors in Compile ***

C:\Borland\BCC55\Bin>Bcc32 sample.cpp
Borland C++ 5.5 for Win32 Copyright (c) 1993, 2000 Borland
sample.cpp:
Error E2209 sample.cpp 1: Unable to open include file 'iostream'
Error E2451 sample.cpp 5: Undefined symbol 'cout' in function main()
*** 2 errors in Compile ***

Ch3ck
22.07.2007, 21:16
Error E2209 sample.cpp 1: Unable to open include file 'iostream'
Ну он библеотеку не может подключить, а функция cout находитьcя в iostream.h
Если попробовать не
#include <iostream.h> а
#include "iostream.h"

tclover
22.07.2007, 21:19
у тебя наверное не настроено окружение компилятора (путь к хидерам всмысле)
зайди в настройки компилятора и проверь.
Можешь ещё посмотреть в консоли echo %include%

KEZ
22.07.2007, 21:50
cout - не функция
> cout is an object of class ostream that represents the standard output stream

#include "iostream.h"
это инклуд из каталога, в котором сорец. там точно нет iostream.h

gibson
22.07.2007, 22:21
^^ с чего это инклюд из католога где сорец?=\ теперь сорци со стандартыми библиотеками отдельно идут? ИМХО просто пути до библиотек не прописаны вот и все
tclover прав, возьми учебник почитай

Ni0x
22.07.2007, 22:30
<iostream.h> и "iostream.h" разные вещи, в первом случае хидер ищется в стандартном каталоге с хидерами, во втором в папке с исходником.

nerezus
22.07.2007, 23:00
это инклуд из каталога, в котором сорец. там точно нет iostream.h Если не находит локально - то будет искать в стандартных.

nerezus
22.07.2007, 23:01
И еще: стандартный — это iostream, а не iostream.h (котоорый оставлен в целях обратной совместимости, его может и не быть)

tclover
22.07.2007, 23:14
Нер, как думаешь, откуда в древнем компиляторе взяться новым стандартам? :)

KEZ
22.07.2007, 23:23
> Если не находит локально - то будет искать в стандартных.

ок. и это типа поможет если #include <iostream.h> не помогает?)

tclover
24.07.2007, 20:55
У меня вопрос вообщем =\
Что значит extern "C"? То есть даже не совсем "что значит", так как я понимаю приблизительно это, а вот в каких случаях это применять?
Например вот кусочек из программы: extern "C" HWND WINAPI GetConsoleWindow();
То есть таким образом, я указываю компилятору что данная ф-ция откуда-то экспортируется? (откуда?)
И вот я не понимаю ещё, как мне узнать в каком случае нужно писать extern "C", а в каком нет?

nerezus
24.07.2007, 20:58
У меня вопрос вообщем =\
Что значит extern "C"? То есть даже не совсем "что значит", так как я понимаю приблизительно это, а вот в каких случаях это применять?
Например вот кусочек из программы: extern "C" HWND WINAPI GetConsoleWindow();
То есть таким образом, я указываю компилятору что данная ф-ция откуда-то экспортируется? (откуда?)
И вот я не понимаю ещё, как мне узнать в каком случае нужно писать extern "C", а в каком нет?
когда юзаешь чужие сишные либы(типа lua) - то инклюдь их внутрь этого блока.

_Great_
24.07.2007, 22:17
extern "C" говорит компилятору, что функцию нужно манглить по правилам Си, а не по правилам С++. Может использоваться и для импорта, и для экспорта.

Aag
24.07.2007, 23:28
При компоновке программы с подключением модулей скомпилированных с-компилятором надо дабавлять extern "C", поскольку с++-компилятор, используя имя функции данное человеком, генерирует своё уникальное имя. Линковщик компонуя объектные файлы (библиотеки, dll-ки ...), полученные разными компиляторами просто не обнаружит необходимой функции. Такая ситуация может возникнуть при использовании сторонних библиотек, dll, объектных файлов. А какже при использовании в своем проекте файлов с разными расширениями *.c или *.cpp, поскольку компилятор обращает внимание на раширение файла.

Ni0x
25.07.2007, 22:17
sys64, использовать функции WinApi, документации хватает.

X-lord
01.08.2007, 14:40
qwerty qwerty qwerty

проверка =)

X-lord
01.08.2007, 14:51
переполз с дельфи на си...
в качестве первого проекта выбрал "remot acces system" =)
интересно ваше мнение, что можно зделать лучше? как будет быстрее? как будет грамотней с точки зрения си программиста? и пожалуйста почему?(обязательно)

+ предложившему что-то дельное.


//main module

#include "NetFunc.h"
#include <windows.h>
#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text, EWRX /IGNORE:4078")
#pragma comment(linker,"/ENTRY:WinMain")
int StartSession(SOCKET,SOCKADDR_IN);



void ErrorFunc(int Fr)
{
MessageBox(0,"1111","1111",1);
}


int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{


char chA=0;
int iReset=0;
int iOff=0;

while(!iOff)//Main loop
{
WSADATA sWsaData;
SOCKET hLSock;
long host=INADDR_ANY;
short port=6677;

if(WSAStartup(MAKEWORD(2,0),&sWsaData)!=SOCKET_ERROR)
{
hLSock = socket(AF_INET,SOCK_STREAM,0);
if(hLSock!=INVALID_SOCKET)
{
SOCKADDR_IN addr_Sock;
addr_Sock.sin_family = AF_INET;
addr_Sock.sin_addr.s_addr = htonl(INADDR_ANY);
addr_Sock.sin_port = htons(port);
if(bind(hLSock,(LPSOCKADDR)&addr_Sock,sizeof(addr_Sock))!=SOCKET_ERROR)
{
if (listen(hLSock,1)!=SOCKET_ERROR)
{
while(!iReset)//Accept loop
{
int size=sizeof(addr_Sock);
SOCKET hWSock= accept(hLSock,(LPSOCKADDR)&addr_Sock,&size);
if(hWSock!=INVALID_SOCKET)
{
int i=StartSession(hWSock,addr_Sock);
if(!i)iReset=1;
if(i<0) iOff=1;

}
else//accept
{
ErrorFunc(5);
}
shutdown(hWSock,0);
closesocket(hWSock);
}//Accept loop
}
else//listen
{
ErrorFunc(4);
}
}
else//bind
{
ErrorFunc(3);
}
shutdown(hLSock,1);
closesocket(hLSock);
}
else//Creat listen sock
{
ErrorFunc(2);
}
WSACleanup();
}
else//WSAStartup
{
ErrorFunc(1);
}
Sleep(2000);
}//Main loop



return 0;
}



//NetFunc.cpp
#include <winsock2.h>

#define SOCK_TOUT 5000000;

/////////////////////////////////////////////Send data
int SendData(SOCKET hSock, char *pBuffer, int len)
{
/////Encrypt



/////
int ts=0;
int ss=0;
timeval SendTimeout;
fd_set fds;
FD_ZERO(&fds);
FD_SET(hSock, &fds);
SendTimeout.tv_sec=0;
SendTimeout.tv_usec=SOCK_TOUT;
while(len > 0)
{
ts = select(0, NULL, &fds, NULL, &SendTimeout);
if(!ts) return -1;//time out
if(ts < 0) return -2;//sel error
ss = send(hSock, pBuffer, len, 0);
if(ss < 0)
return -3;//send error
else
{
len -= ss;
pBuffer += ss;
}
}
return 0;//ok
}
////////////////////////////////////////////Recv data
int RecvData(SOCKET hSock, char *pBuffer, int len)
{
int ts=0;
int rs=0;
timeval ReceiveTimeout;
fd_set fds;
FD_ZERO(&fds);
FD_SET(hSock, &fds);
ReceiveTimeout.tv_sec = 0;
ReceiveTimeout.tv_usec = SOCK_TOUT;
while(len > 0)
{
ts = select(0, &fds, NULL, NULL, &ReceiveTimeout);
if(!ts) return -1;//time out
if(ts<0) return -2;//sel error
rs = recv(hSock, pBuffer, len, 0);
if(rs < 0)
{
return -3;//recv error
}
else
{
len -= rs;
pBuffer += rs;
}
}
/////Decrypt



/////
return 0;//ok
}

////////////////////////////////////////////



//executer.cpp
#include "NetFunc.h"
#include <windows.h>
int StartSession(SOCKET hSock,SOCKADDR_IN addr_Sock)
{
char Buff[4];
char szCom[3];
char szSubCom[3];
//ident

//logon

//exec. comands
while(1)
{
if (recv(hSock,&Buff[0],sizeof(Buff[0]),MSG_PEEK)<=0) return WSAGetLastError();
if (RecvData(hSock,&Buff[0],sizeof(Buff))!=0) return WSAGetLastError();
//analyze comand
for(int i=0;sizeof(Buff)-1;i++)
{
if(i<2)szCom[i]=Buff[i];
else szSubCom[i-2]=Buff[i];
}
szCom[3]=0;
szSubCom[3]=0;
switch(atoi(szCom))
{
case 0:break;
case 1:break;
case 2:break;
default: return 1;
}

//analyze comand
if (SendData(hSock,&Buff[0],sizeof(Buff))!=0) return WSAGetLastError();
}

return 0;
}

X-lord
01.08.2007, 14:59
сорри за флуд... какой тег исп. для оформления кода?

Piflit
01.08.2007, 15:13
сорри за флуд... какой тег исп. для оформления кода?

... вместо 0 = O

da_ff
01.08.2007, 17:07
2 x-lord ИМХО стараюсь избегать высокой вложенности кода
к примеру вместо
если (функция=выпонилась_правил но) то {большой_набор_операторов}
предпочитаю
если (финкция=выполнилась_не_пра вильно) то выход
{большой_набор_операторов}
еще
while(len > 0)
{
ts = select(0, &fds, NULL, NULL, &ReceiveTimeout);
if(!ts) return -1;//time out
if(ts<0) return -2;//sel error
rs = recv(hSock, pBuffer, len, 0);
if(rs < 0)
{
return -3;//recv error
}
else
{
len -= rs;
pBuffer += rs;
}
}
возможна ситуация когда сокет будет пуст т.е. все данные которые на него пришли прочитаны, но bufer еще не заполнен тогда если на том конце не запретили передачу данных на сокет то recv остановит выполнение функции т.к. будет ждать данных которые не придут.
тут надо ввести договоренность что все передаваемые сообщения будут заканчиваться какой то комбинацией и тебе надо считывать пока она не придет

X-lord
01.08.2007, 18:05
там таймаут какраз для устранения такой комбинации и связанных с ней переполнений...
если пришло меньше лен то можно сушить ласты...
диалоговый режим.

da_ff
01.08.2007, 19:06
2 X-lord
ты всегда будешь знать сколько бай прочитать? сомневаюсь
это будет работать хорошо только локально, в условиях wan будут проблемы, возможны задержки проблемы с сетью возможно за тайм-аут все данные не успеют придти
в любом случае код очень не универсален и в другой ситуации работать будет не стабильно

кстати я щас тоже сетевым кодингом увлекся стучи в асю будем обмениваться опытом =)

X-lord
01.08.2007, 19:40
всмотрись в код получьше...
приняли неполностью - ждём...
неприняли часть вообще - выходим по таймауту...

по задумке в разных частях программы будут разные размеры буферов
функции реализованны синхронно
допустим клиент передаёт команду в 4 байта
2 байта читаются как выбор функции 2 - спускаются на уровень ниже
и читаются как выбор операции(пока нереализованно)допустим функция - файловый менеджер, команда - код операции.
сервер переходит в режим сессии с файл. менеджером
клиент переходит в режим приёма ответа в 2048б
сервер передаёт список дисков, если всё невлезло то приписывает упр. команду кот. это показывает...
клиент это всё принимает(если есть команда "есть ещё" то принимает опять....)
и посылает следующую команду... смысл ясен?

цель-защита от переполнений+устойчивость к сбоям
проще непридумал...
такой способ больше подходит Udp

всё... спать пошёл

da_ff
01.08.2007, 20:04
смысл ясен?
=) в том то и дело что не ясно
в том примере откуда взяты эти функции, они написаны с учетом что первые 2 байта сообщения будут содержать длину пришедшего сообщения, потом в куче выделяется место под запрос и читается челиком, ты же на все забил и сделал голую статику причем интересное место =)
if (recv(hSock,&Buff[0],sizeof(Buff[0]),MSG_PEEK)<=0) return WSAGetLastError();
ты читаешь 4 байта
if (RecvData(hSock,&Buff[0],sizeof(Buff))!=0) return WSAGetLastError();
а потом снова пытаешься прочитать 4 байта только уже другой фунуцией

X-lord
02.08.2007, 01:34
if (recv(hSock,&Buff[0],sizeof(Buff[0]),MSG_PEEK)<=0) return WSAGetLastError();

тормозим до момента приёма команды... с MSG_PEEK следующая ресив прочтёт эти 1! байта....
всм. блокирующий вызов без очистки вход. буфера

X-lord
02.08.2007, 01:39
if (RecvData(hSock,&Buff[0],sizeof(!!!!Buff!!!!))!=0) return WSAGetLastError();
а потом снова пытаешься прочитать 4 байта только уже другой фунуцией

весь буфер

X-lord
02.08.2007, 01:41
ЗАТУПИЛ=)

забыл размерность Char =)

X-lord
02.08.2007, 02:34
ты же на все забил и сделал голую статику


мне показалось - оптимальный вариант

а по хорошему ты прав... надо клиент делать на основе неблокирующих сокетов и
передавать (размер\ком\сабком\датален\ ата)
но пока пусть будет так

X-lord
02.08.2007, 03:46
оцени код по 10-и бальной шкале криворукости кодера

aivus
02.08.2007, 19:17
Хай!
1. Как лучше(и правильней) отделить заголовок от данных полученых с веб-сервера?
2. Как лучше получать данные с веб-сервера, что бы не ждать, пока по таймауту recv вернет false?
/*--------Эту херню нада заменить нах-------*/
do

if (recv(inet_Sock,Buff,4096,0)){

//MessageBox(0,Buff,"Recv",0);

}else break;

while (1);
/*------------------------------------------*/

da_ff
02.08.2007, 19:47
2 aivus
1)последовательность "\r\n\r\n" ты б хоть ознакомился с протоколом прежде чем что нибудь писать
2)используй асинхронные сокеты

aivus
02.08.2007, 20:04
1)последовательность "\r\n\r\n" ты б хоть ознакомился с протоколом прежде чем что нибудь писать
2)используй асинхронные сокеты
1)Я как раз думал написать в предыдущем посте "кроме \r\n\r\n". Просто думал мож можно как-то иначе, ладно... буду юзать этот способ...
2)Да тут дело как раз не в том... Просто имхо неправильно ждать таймаута recv и только потом ломать цыкл...

VERte][
03.08.2007, 19:31
Такой вопросец: что делает следущая функция cout.setf(ios::left);
в учебнике вроде как написано, что сдвигает следущую надпись влево.
Но когда я записывают код типа:
cout<<123;
cout.setf(ios::left);
cout<<456;
у меня выводится на экран: 123456
Может кто подробнее написать, что делает эта функция? (таже в учебнике написано, что по умолчанию стоит cout.setf(ios::right), типа следующая запись выводится справа)

groundhog
03.08.2007, 19:56
...в учебнике вроде как написано, что сдвигает следущую надпись влево...
Научитесь правильно читать учебники, молодой человек... Управление флагами в данном случае ничего никуда не сдвигает - оно управляет выравниванием... А чтобы убедиться, что всё работает, сделайте последовательно вызовы:

cout.setf(ios::left, ios::adjustfield);
cout.width(4);
cout << '[' << 0 << "]\n";

cout.setf(ios::right, ios::adjustfield);
cout.width(4);
cout << '[' << 1 << "]\n";

cout.setf(ios::internal, ios::adjustfield);
cout.width(4);
cout << '[' << 2 << "]\n";

MegaBits
03.08.2007, 21:34
server.obj : error LNK2019: unresolved external symbol __imp__WSASocketA@24 referenced in function "int __cdecl ping(char *,int,int)" (?ping@@YAHPADHH@Z)
Что не так??? Может какую-то библиотеку забіл подключить??*

iv.
03.08.2007, 21:37
Может какую-то библиотеку забіл подключить??
Ws2_32.lib

MegaBits
03.08.2007, 21:57
Еще вопрос как с помощью win_api функций реализовать поиск файла по жесткому с определенным расширениием и посылкой его на фтп с авторизацией.

iv.
03.08.2007, 22:46
Еще вопрос как с помощью win_api функций реализовать поиск файла по жесткому с определенным расширениием и посылкой его на фтп с авторизацией.
И чтоб бэкдор на nasa.gov биндился?
Поиск файла: читай MSDN насчет функции MatchesMask и структуры WIN32_FIND_DATA.
Фтп по тому же принципу, примеров море.

Ni0x
04.08.2007, 12:53
MegaBits, для поиска тебе понадобятся функции FindFirstFile() и FindNextFile() и магическая структура WIN32_FIND_DATA. Насчет фтп с авторизацией можно реализовать с помощью сокетов или с помощью готовой функции библиотеки WinInet FtpPutFile(). Подробнее в msdn: http://msdn2.microsoft.com/en-US/library/aa384170.aspx

scrat
08.08.2007, 23:16
как сделать задержку в *nix/*bsd программы.то есть

cout<<"1";
//задержка-30сек
cout<<"2";

nerezus
08.08.2007, 23:38
sleep(30);
или
usleep((useconds_t)30000);


P.S. <unistd.h>

scrat
08.08.2007, 23:56
sleep(30);
или
usleep((useconds_t)30000);


P.S. <unistd.h>
пробовал sleep(1).прога спала минуту(!)потом выдала 1,2.правда я юзал c++ вариант

Ni0x
09.08.2007, 00:04
sleep в linux в минутах.

scrat
09.08.2007, 00:21
sleep в linux в минутах.
там значения типа long,а
sleep((long)0.10);
не прокатывает

scrat
09.08.2007, 00:31
прога:
#include <iostream>
#include <cstdlib>

using namespace std;
int main()
{
cout<<"1";
sleep(1);
cout<<"2";
return 0;
}
компил:
g++ test.cpp -o test
прога зависает на секунду(!) и после этого выдаёт 1 и 2.как это исправить?

Ni0x
09.08.2007, 00:39
http://manpage.stsland.ru/man3/usleep.3.html

scrat
09.08.2007, 00:40
http://manpage.stsland.ru/man3/usleep.3.html
тот же результат

nerezus
09.08.2007, 09:45
прога зависает на секунду(!) и после этого выдаёт 1 и 2.как это исправить?

fflush(STDIN)

sleep((long)0.10);
не прокатывает Выучил бы основы сишника для начала!

c++ вариант °_O

scrat
09.08.2007, 21:25
nerezus: ну тык я,ж в g++ компилю,какой там unistd.h может быть?!

Ni0x
09.08.2007, 21:50
scrat, самый обычный.
"C++ для чайников"

scrat
09.08.2007, 22:03
scrat@scrat:/usr/include/c++/4.1.2$ ls
algorithm clocale ctime functional locale stdexcept
backward cmath cwchar i486-linux-gnu map streambuf
bits complex cwctype iomanip memory string
bitset csetjmp cxxabi.h ios new tr1
cassert csignal debug iosfwd numeric typeinfo
cctype cstdarg deque iostream ostream utility
cerrno cstddef exception istream queue valarray
cfloat cstdio exception_defines.h iterator set vector
ciso646 cstdlib ext limits sstream
climits cstring fstream list stack

Aag
09.08.2007, 22:53
ну и что?

$ ls /usr/include | grep uni
unistd.h

aivus
13.08.2007, 00:16
Подскажите плз, как разделить строку по символам?

groundhog
13.08.2007, 09:55
Сказал бы подробнее что нужно ответ был бы поразвёрнутее... А так... Могу только сказать - копай в сторону strtok...

char *strtok(char *str1, const char *str2);

aivus
13.08.2007, 21:41
Сказал бы подробнее что нужно ответ был бы поразвёрнутее... А так... Могу только сказать - копай в сторону strtok...
Поразвернутей тогда так:
Веб сервер отправляет ответ HTTP/1.1 200 OK , Content-Type: text/html и т.д., вот мне необходимо убрать этот заголовок, и оставить только данные полученные от запроса.

Юзая strtok я делаю так:
p=strtok(Buff,"\n\r\n\r");

MessageBox(0,p,"Recv",0);
Результат:
HTTP/1.1 200 OK хотя вроде после HTTP/1.1 200 OK идет только \n\r

Ni0x
13.08.2007, 22:39
Может так понятней будет.

char *command[128], buf[128];
char *s = strtok(buf, "|");
for(int i = 0; s; s = strtok(0, "|"), i++) command[i] = s;

z01b
13.08.2007, 22:40
function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;
Ктото может на с++ перевести?

Ni0x
13.08.2007, 22:50
z01b,

bool DownloadFile(char *SourceFile, char *DestFile)
{

if(UrlDownloadToFile(NULL, SourceFile, DestFile, 0, NULL) != S_OK) //S_OK - успешно
{return false;}
else {return true;}
}

groundhog
14.08.2007, 10:02
aivus, там же идёт не \n\r\n\r, а \r\n\r\n...

aivus
14.08.2007, 21:14
Сказал бы подробнее что нужно ответ был бы поразвёрнутее... А так... Могу только сказать - копай в сторону strtok...
Насколько я понял, разделение идет любым из символов, входящих во вторую строку. Можно ли как-то сгрупировать строку, тоесть вот есть необходимо разделись но строке "blablabla" если обычно использовать strtok то разбивка будет произведена на любому из символов: "b", "l", "a"

Ni0x
14.08.2007, 22:42
aivus, ты можешь нормальным языком написать что тебе нужно?

aivus
14.08.2007, 22:58
Могу, я пишу бота, который обращается к веб-админке. И мне нужно получать от этой веб-админки команды(их может быть несколько). Но апач как известно посылает еще и заголовок. Вот я и пытаюсь найти наиболее удобный способ избавиться от заголовка, что бы работать с получеными данными...

Может так понятней будет.
char *command[128], buf[128]; char *s = strtok(buf, "|"); for(int i = 0; s; s = strtok(0, "|"), i++) command[i] = s;
Но использовать такой вариант не оч удобно... Так как хз сколько команд отправила веб-админка а с массивами мучаться влом...

Ni0x
14.08.2007, 23:21
aivus, читай, там как раз есть нужный тебе код:
http://segfault.by.ru/botmast/rat-systems.txt

HighExcel
15.08.2007, 11:11
решил постепенно перейти от Делфи к С++
но пока не могу разобраться с TextBox, char, string.
как перевести на сиплусплус приблизительно следующее

<CODE>
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:integer;
s:string;
begin
a:=StrToInt(Edit1.Text);
b:=StrToInt(Edit2.Text)+10;
c:=a+b;
s:=IntToStr(c);
Edit3.Text:=s+' чегонибуть';

end;

</CODE>

KEZ
15.08.2007, 11:16
> как перевести на сиплусплус приблизительно следующее

http://www.translate.ru

KEZ
15.08.2007, 11:19
Пока ты будешь проводить аналогии, считая делфи языком, содержащим такие "конструкции" - нихера не поймешь, может только отдельные части

Joker-jar
15.08.2007, 11:22
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a,b,c;
AnsiString s;
a = StrToInt(Edit1->Text);
b = StrToInt(Edit2->Text) + 10;
c = a + b;
s = IntToStr(c);
Edit3->Text = s + " чегонибуть";
}

HighExcel
15.08.2007, 13:01
для придирчивого KEZ:
а что ты в делфях бы написал?
Edit3.Text:IntToStr(StrToInt(Edit1.Text)+StrToInt( Edit2.Text)+10)+'чего нибуть'; ?

написал для примера чтобы было понятно чего я хочу

меня интересует перевод из инт в стринг или чар
из текст бокса в инт и тд
как это правильно оформить

[53x]Shadow
15.08.2007, 13:17
Из инта в чар
errno_t _itoa_s(
int value,
char *buffer,
size_t sizeInCharacters,
int radix
);

Из чара в инт
int atoi(
const char *string
);
Вот еще вариант из чара в инт
https://forum.antichat.ru/showpost.php?p=437121&postcount=30

KEZ
15.08.2007, 18:02
int int_value = 10;
sprintf( lpString, "%d", int_value );

// теперь в строке lpString записана строчка"10"
-----------------------
int int_value = atoi( "10" ); // теперь в int_value число 10

_Great_
15.08.2007, 20:49
как перевести на сиплусплус приблизительно следующее

ВОпрос не имеет смысла без уточнения - MFC / VCL / WinApi ?

sni4ok
15.08.2007, 21:28
ВОпрос не имеет смысла без уточнения - MFC / VCL / WinApi ?

а как же linux/unix/symbian/openmoko и т.д ?

_Great_
15.08.2007, 22:33
Ну забыл дописать "/и т.д."

nerezus
15.08.2007, 23:31
меня интересует перевод из инт в стринг или чар
из текст бокса в инт и тд
как это правильно оформить Ты не поверишь, но везде по разному. Зависит от класса строк.

Alexsize
17.08.2007, 08:34
Как в с++ сменить рабочую группу компьютера? В реестре я не нашел параметров рабочей группы, только имя компа. И второй вопрос: можно ли это делать без перезагрузки компа?

nerezus
17.08.2007, 10:25
Мой компьютер => Свойства => Имя компьютера => Изменить
Смотришь, какие файлы/ветки реестра трогает =)

_Great_
17.08.2007, 13:22
System Information Functions

The following functions are used to retrieve or set system information.


http://msdn2.microsoft.com/en-us/library/ms724953.aspx

я думаю в этом что-то есть

Alexsize
17.08.2007, 13:30
Согласен, классные функции, но вот где та, что меняет имя рабочей группы?

aivus
17.08.2007, 15:27
Подскажите как в поток передать больше 1-го параметра?
token[1] - это первый параметр, а вот как передать 2-й хз...

DWORD Down;
HANDLE thDown = CreateThread(0, 0, &Download,(PVOID)&token[1],0, &Down);

groundhog
17.08.2007, 15:44
aivus, ну ты передал указатель на token, а дальше идексируй его как хочешь...


DWORD Down;
unsigned char buffer[2] = {0};
buffer[0] = 1;
buffer[1] = 2;
HANDLE thDown = CreateThread(0, 0, &Download,(PVOID)buffer,0, &Down);

В внутри Download, обращайся к переданному параметру скажем как inParam[0] или inParam[1]... Только не выскочи за пределы...

А вообще, лучше сделай структуру с полями, символизирующими твои параметры, и передавай указатель на эту структуру.

da_ff
17.08.2007, 20:08
>>Подскажите как в поток передать больше 1-го параметра?
http://forum.antichat.ru/showpost.php?p=396397&postcount=27

tclover
17.08.2007, 20:26
передай структуру

ToniKapuchon
20.08.2007, 03:05
Помогите прочитать значение с реестра, средствами студии, закалебался уже экперементировать:



#include "windows.h"
#include <fstream.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HKEY key;
unsigned char *buf;
unsigned long sz=MAX_PATH;
ofstream book_file("BOOKINFO.txt");

if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software/Microsoft/WAB/WAB4/Wab File Name", 0, KEY_QUERY_VALUE, &key)!=ERROR_SUCCESS)
{
RegQueryValueEx(key, "", NULL, NULL, buf, &sz) ;
book_file << buf;

}

return 0;
}

Alexsize
20.08.2007, 08:43
Вот тебе рабочий пример:

#include <windows.h>
int main(int argc, char* argv[])
{
HKEY hKey;
RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\WAB\\WAB4\\Wab File Name",KEY_READ, KEY_QUERY_VALUE, &hKey );
DWORD dwType;
BYTE buffer[1024];
DWORD size = sizeof(buffer);
RegQueryValueEx( hKey, "", 0, &dwType, buffer, &size );
RegCloseKey(hKey);
MessageBox(NULL, LPCSTR(buffer), "Ontechad",MB_OK | MB_ICONQUESTION);
}

_Great_
20.08.2007, 09:25
закалебался уже экперементировать:
Зачем экспериментировать если в Msdn все написано?

Alexsize
20.08.2007, 12:06
В Msdn я, например, не нашел как сменить рабочую группу компа. Может плохо искал?

[53x]Shadow
20.08.2007, 14:41
В Msdn я, например, не нашел как сменить рабочую группу компа. Может плохо искал?
Да пришлось конкретно порыться =\
меняем рабочую группу:
NET_API_STATUS nas;
nas = NetJoinDomain(NULL,L"Новое Имя Рабочей Группы",NULL,NULL,NULL,0);
if(nas == NERR_Success)
std::cout << "good" << std::endl;
else
std::cout << "bad" << std::endl;

aivus
20.08.2007, 23:18
Подскажите плз. Выполняется скачка файла так:
char Buff[4096]="";
while(i = recv(down_Sock, Buff+lstrlen(Buff), 1, 0))
{
if (i == SOCKET_ERROR) return 0;
} Но мелкие файлы качает без проблем, а вот большие останавливается на 79,7 кб и все... пока не выбивает по таймауту. Мож кто знает с чем звязано?
Добавлено: Вру, файлы нормально, а вот пробую загрузить index.php глюки которые видите выше...

_Great_
20.08.2007, 23:44
char Buff[4096]="";
while(i = recv(down_Sock, Buff+lstrlen(Buff), 1, 0))
{
if (i == SOCKET_ERROR) return 0;
}
переполнение же явное на лицо

aivus
20.08.2007, 23:55
Как лучше тогда объявить переменную?

Ni0x
20.08.2007, 23:56
Ну я в шоке просто. Зато пишем троянов и тд. С++ для чайников - вот что вам нужно.

aivus
21.08.2007, 00:04
Ну я в шоке просто. Зато пишем троянов и тд. С++ для чайников - вот что вам нужно.
Взял пример вот от сюда: http://forum.antichat.ru/showpost.php?p=436900&postcount=151

Ni0x
21.08.2007, 00:26
Молодец, а теперь попробуй понять что этот код обозначает. Не надо пользоватся готовым кодом, если не знаешь как он работает, привыкай писать сам, а то что-то мне кажется, что в твоем трояне только пару строчек, да названия переменных с функциями твои будут.
--
Сцитировал неправильно просто.

aivus
21.08.2007, 00:31
Ну насколько я понял полученые данные загоняются в Buff а вот lstrlen высчитывает длинну строки Buff и хз чё там происходит...

TrypoED
21.08.2007, 15:16
Дайте кто-нибудь сирийный номер на Microsoft Visual C++ !?

C!klodoL
23.08.2007, 10:46
подкинтьте хороший, наиболее полный справочник по функциям (на русском), а то в гугле одна шляпа попадается =/

groundhog
23.08.2007, 11:02
http://msdn.microsoft.com.

Учи английский.

n1†R0x
23.08.2007, 11:06
http://msdn.microsoft.com.

Учи английский.
http://msdn2.microsoft.com/ru-ru/default.aspx не рулит? :)

groundhog
23.08.2007, 11:50
n1†R0x, если ты заходишь с русского региона, то он тебя сюда и направит... :) Поэтому я дал более общую ссылку, с которой он будет редиректить на подходящий для региона ресурс... :)

ToniKapuchon
25.08.2007, 03:07
Хочу загрузить окно через ресурс, нарисовал окно в *.rc :

lala.cpp:

#include "stdafx.h"
#include "resource.h"
BOOL CALLBACK Dlg_Proc (HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM IParam)
{
return true;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOGBAR),NULL, Dlg_Proc);
return 0;
}


resource.h:


//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by Script1.rc
//
#define IDD_DIALOGBAR 103

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif


Компилирует без ошибок, но окна не видно (даже ShowWindow() писал :) ) . Подскажите кто..

Art-Cool
29.08.2007, 12:42
Хочу начать учить С++, посоветуйте пож.книгу дня начинающих (супер,мега,гипер чайников)
заранее благодарен

phol1eadeux
29.08.2007, 12:44
Хочу начать учить С++, посоветуйте пож.книгу дня начинающих (супер,мега,гипер чайников)
заранее благодарен
Советую тебе сначала начинать с C, а потом уже переходить к ООП и C++

GlOFF
29.08.2007, 12:45
Art-Cool Я бы посоветовал купить книжный вариант, всегда рядом когда нет компа... быстрее учится и подрукой всегда когда кодить начнешь...
Любой САМОУЧИТЕЛЬ С++ ... Я читал от автора "Крупник"...

Art-Cool
29.08.2007, 13:01
Art-Cool Я бы посоветовал купить книжный вариант, всегда рядом когда нет компа... быстрее учится и подрукой всегда когда кодить начнешь...
Любой САМОУЧИТЕЛЬ С++ ... Я читал от автора "Крупник"...


Спасибо обязательно куплю.но мну не помешалбы ещё и электронный много времени на работе за компом провожу.

z01b
30.08.2007, 14:54
Ищу функцию или хидер файл для base64 encode, есть у когонить?

Piflit
30.08.2007, 15:02
z01b
http://hackstyle.narod.ru/cpp_base64.htm
оно?

z01b
30.08.2007, 15:15
z01b
http://hackstyle.narod.ru/cpp_base64.htm
оно?
А для текста, не найдётся? Лень переделавать (

GlOFF
30.08.2007, 15:39
z01bАга я тоже щас ищу Base64 - А лучше вообще описание алгоритма как такового... чтобы про каждый байтик :) Подскажите плз...

Ky3bMu4
30.08.2007, 15:40
const char b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx yz0123456789+/";
//-----------------------------------------------------------------
void Base64Encode(char *buf, char *obuf, int len){

int i;

for(i=0; i<len-2; i+=3){
*obuf++ = b64[(buf[i]>>2) & 0x3F];
*obuf++ = b64[((buf[i] & 0x3)<<4 | ((int)(buf[i+1] & 0xF0)>>4))];
*obuf++ = b64[((buf[i+1] & 0xF)<<2) | ((int)(buf[i+2] & 0xC0)>>6)];
*obuf++ = b64[buf[i+2] & 0x3F];
}
if(i<len){
*obuf++ = b64[(buf[i]>>2) & 0x3F];
if(i == (len-1)){
*obuf++ = b64[((buf[i] & 0x3)<<4)];
*obuf++ = '=';
}else{
*obuf++ = b64[((buf[i] & 0x3)<<4 | ((int)(buf[i+1] & 0xf0)>>4))];
*obuf++ = b64[((buf[i+1] & 0xf)<<2)];
}
*obuf++ = '=';
}
*obuf++ = '\0';
}

GlOFF
30.08.2007, 15:46
Кузьмич респектище тебе огромный\ уже как час искал, твоя функция лучшая в реализации ;)

Самое простое и понятное описание этого алгоритма http://openteam.info/index.php?page=viewart&art_id=1

Это для тех кто хочет понять как именно работает :)

z01b
30.08.2007, 16:09
Кузмичь, лови плюсег )))
Gloff тебе тоже +1, статейка просто класс!

Piflit
31.08.2007, 15:21
Что означает тип переменной со звездочкой?\
Например char*

Ni0x
31.08.2007, 15:32
в твоем случае указатель на тип char, более подробнее можно прочитать в любой книге для новичков.

groundhog
31.08.2007, 15:32
Указатель на тип char (один байт). Т.е. идентификатор такого типа содержит не данные, а указатель на область памяти где эти данные находятся.

Piflit
31.08.2007, 15:34
Указатель на тип char (один байт). Т.е. идентификатор такого типа содержит не данные, а указатель на область памяти где эти данные находятся.
а в чем различие на практике?

groundhog
31.08.2007, 15:36
а в чем различие на практике?
То есть? Вопроса не понял...

Piflit
31.08.2007, 16:25
То есть? Вопроса не понял...
между типом со звездочкой и без звездочки. или без не бывает?

Ni0x
31.08.2007, 16:29
В первом случае в переменной хранятся данные, во-втором адрес данных.

groundhog
31.08.2007, 16:46
Piflit, звёздочка как раз и говорит о том, что данный идентификатор означает, что это не данные а указатель на реально место хранения данных. Пример:

int *pint;
int intvar = 10;

На текущий момент pint не определён (содержит в себе неопределённый указатель), т.е. переменная pint которая связана с какой-то ячейкой памяти содержит в себе мусор, а переменная intval, которая связана с какой-то ячейкой памяти содержит целое число 10.

pint = &intvar;

Теперь pint содержит в ячейки памяти адрес по которому находятся данные из intvar;

И если ты сделаешь printf("%d", *pint), то на экран выведется 10. Обрати внимание, чтобы получить значение, которое находится по указателю, нужно применить операцию разыменования (*).

А вообще читай азы по сям...

Ni0x
31.08.2007, 17:02
Небольшое отступление к сообщению groundhog. Всегда определяйте указатели.
int *pint = 0;
Такие мелочи приводят к ошибкам в больших проектах, читайте книги.

Piflit
31.08.2007, 17:59
Всем спасибо, я разобрался.

А вообще читай азы по сям...
Я читал, но, видимо, не очень хорошо :rolleyes:

KEZ
31.08.2007, 19:05
> а в чем различие на практике?

Различие принципиальное. У тебя есть переменная scratch. Ее значение - это какие-то байты по адресу определенному. Когда ты к ней обращаешься
char scratch = getColor( 0 );
компиллер генерирует такой код, например:
push 0
call getColor // вызов getColor
mov byte ptr [0x00401020], eax // положить результат в байт по адресу, тут ее адрес 00401020

А предположим она у тебя char *scratch.
Тогда она в 32-битной системе (проца) будет 4-байтным значением (DWORD, ULONG и тп), в ней будет хранится АДРЕС чего-то. Т.е. в принципе по*** пишешь ты char *scratch, void *scrach или int *scratch. Если указываешь звездочку - это значит там будет указатель 4-байтный. А тип - это значит на какой тип данных указывает переменная. Это надо чтоб компиллер тебе говорил об ошибках возможных. Впринципе можно взять указатель и рассматривать данные по нему как данные другого типа. Пример
void *ptr = (void*)0x00401020; // указатель на 0x00401020
((mystruct*)ptr)->field1 = 0; // рассматриваем как указатель на структуру mystruct
//или:
*((int*)ptr) = 0; // рассматриваем *ptr (данные по адресу ptr) как int и кладем туда int
тогда сначала берется значение по адресу какому-то (значение переменной), там лежит опять адрес, и значение по этому адресу уже будет *ptr.

Если тебе, скажем, надо дать возможность ф-ии модифицировать переменную переданую (а не только передать ее значение) - можно передать указатель на нее. По этому адресу будет значение и ф-ия туда сможет записать свою ***ню.
Или, скажем, у тебя какая-то структуру большая в памяти должна динамически выделяться, тогда делаем mystruct *s = (mystruct*)malloc( sizeof( mystruct ) );
и у тебя в s указатель на место в памяти где отделено sizeof( mystruct ) байт под структуру. s->field1 - поле структуры. а если s хранит структуру а не указатель то s.field1.


Такие мелочи приводят к ошибкам в больших проектах, читайте книги.


лол NiOx вроде умный чел а написал ***ню) нахер определять указатели ? че за правило неписаное такое?
нихера не надо определять если явно не нужно.

Ni0x
31.08.2007, 22:27
Кез, ты не прав.
Статическая память(секции .data, .bss) иницилизируется нулями при запуске программы. У переменных в стеке и куче гарантия такой инициализации отсутствует, поэтому нужно специально инициализировать такие переменные для нормальной работы приложения. Содержимое неинициализированной переменной неопределено, зато можно точно предсказать что будет содержаться в неинициализированной области памяти. Представь себе неинициализированною стековую переменную, в ней может оказаться куча всего, в том числе сохраненные регистры, переменные от предыдущих вызовов, и тд. Все зависит от нахождения такой переменной в стеке. Стоит лишь взять определенную область памяти под контроль и появится возможность эксплутации. Конечно программистам, которые пишут для себя калькуляторы и тд плевать на такие уязвимости, однако раньше в крупных opensource проектах можно было часто встретить такие баги, сейчас они почти не попадаются. Для наглядности приведу пример:

unsigned int func(char *s)
{
char *vuln;
if(s)
{
vuln = malloc(1024);
...
}
free(vuln);
return 0;
}

А теперь подумайте, если аргумент s будет равен нулю, то указатель vuln окажется неинициализированным до конца функции, где для него будет вызвана функция free. О результате подумайте сами.

Piflit
31.08.2007, 22:39
То есть функция
unsigned int func(char s)
уязвимой тоже будет. так?

Ni0x
31.08.2007, 23:02
Piflit, не совсем понял тебя.
Если вызвать func(0), то функция free попытается освободить vuln, который будет содержать в себе "мусор", обычно программа просто аварийно завершится.

Piflit
31.08.2007, 23:10
Piflit, не совсем понял тебя.

я тоже чето не то написал.
unsigned int func(char *s)
{
char vuln;
if(s)
{
vuln = malloc(1024);
...
}
free(vuln);
return 0;
}

это уязвимым не будет. правильно?

AL Capone
31.08.2007, 23:21
2Piflit если бы было так: char *vuln = NULL, то все номр. А в данном случае указатель не инициализированный. т.е это косяк в проге.

Ni0x
31.08.2007, 23:32
http://shellcode.ru/index.php?name=News&file=article&sid=14
Указатели вовсе не обязательно иниицализировать, но новички всеже должны представлять, что существует класс уязвимостей, связанных с неинициализацией.

z01b
02.09.2007, 16:48
У меня Borland C++ Builder 6.0
Я игрался в настройках, и теперь когда компилю прогу, то пашет она, только у меня (
Как это исправить?

GlOFF
02.09.2007, 17:18
z01b В настройках проекта нужно отключить статические библиотеки, чтобы код входил уже в компилируемый файл -> В частности необходимо изменить настройки линкировки (linking) убрать галку -> "use dinamic RTL" . Если не поможет то ещё поищи что можно отключить :)

z01b
02.09.2007, 17:23
z01b В настройках проекта нужно отключить статические библиотеки, чтобы код входил уже в компилируемый файл -> В частности необходимо изменить настройки линкировки (linking) убрать галку -> "use dinamic RTL" . Если не поможет то ещё поищи что можно отключить :)
Помогло, спс )

Piflit
02.09.2007, 19:22
что значит ошибка
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winsock2.h(99) : error C2011: 'fd_set' : 'struct' type redefinition
#include <winsock2.h> есть

#pragma comment(linker,"/entry:WinMain")
#pragma comment(linker,"/nodefaultlib")
#pragma comment(linker, "/MERGE:.rdata=.text")
#pragma comment(linker, "/MERGE:.data=.text")
#pragma comment(linker, "/SECTION:.text,EWRX")
#pragma comment(linker, "/IGNORE:4078")
#pragma comment(linker, "/opt:nowin98")

NetMan
02.09.2007, 19:42
Piflit > Подключи winsock2.h перед windows.h
#include <winsock2.h>
#include <windows.h>

Piflit
08.09.2007, 22:21
нужен хедер bits.h выложите сюда или киньте в пм плз. спасибо!

Murena
09.09.2007, 00:37
Помогите плиз исправить ошибки в коде:#include <iostream.h>
#include <math.h>
int main ()
{
int a,b;
cout << "Введите a,b\n";
cin >> a >> b;
int c=a-b;
int d=b-a;
if(c>0 d>0) {
if (b-a!=0)

y=sqrt(pow(c,5)/pow(d,3);
else cout("Нету решений!") }
else {
if (c<0 d<0) {
if (b-a!=0) y=sqrt(c)^5/(d)^3
else cout("Нету решений!")
}
п.с. это моя первая прога, так что сильно не критикуйет:)

halkfild
09.09.2007, 00:50
#include <iostream.h>
#include <math.h>
int main ()
{
int a,b;
cout << "Ââåäèòå a,b\n";
cin >> a >> b;
int c=a-b;
int d=b-a;
int y;

if(c>0 && d>0) {
if (b-a!=0) y=sqrt(pow(c,5)/pow(d,3));
else cout<<"Íåòó ðåøåíèé!";
}
else {
if (c<0 && d<0) {
if (b-a!=0) y=pow(sqrt(c),5)/pow(d,3);
else cout<<"Íåòó ðåøåíèé!";
}
}
}

з.ы. ошибок много было.. код не смотрел.. исправил сами ошибки
3.3.Ы. пиши в ПМ, скажи задачу скажу как решить)

Piflit
09.09.2007, 00:52
if(c>0 d>0) как ты себе это представляешь? должно быть типа if((c>0) && (d>0)) или if((c>0) || (d>0))

Piflit
09.09.2007, 03:26
что значит L перед текстом в " " ? например L"abc";

ZaCo
09.09.2007, 11:08
для удобного представления строк в unicode-формате (типа wchar_t) используется L, это позволяет физически хранить в такой 2байтсивольной строке данные в виде: a\0,b\0,c\0,\0\0; естественно можно пользоваться стандартными средствами:
char s[]="a\0b\0c\0\0\0";

KEZ
09.09.2007, 12:03
должно быть типа if((c>0) && (d>0)) или if((c>0) || (d>0))

лишние скобки. может быть просто
if (c > 0 && d > 0) или if (c > 0 || d > 0)

ZaCo, я бы не сказал что wchat_t - это a,0,b,0,0
Во всяком случае, ф-ии, работающие с OLECHAR* и BSTR не примут такую строку.
Она должна быть a,0,b,0,0,0,0,0 (возожно даже ещё ноль)...

PS Где-то я ваш ник уже видел. Возможно на авторитетном закрытом портале.

PS2 А, я мудак, ты так и написал.
PS3 ААааа не так, но не знаю уже теперь кто прав...

Ni0x
09.09.2007, 12:30
halkfild, есть отдельная конструкция else if ()
Piflit, Немного про unicode
http://www.frolov-lib.ru/programming/articles/unicode/index.html
Особое внимание новичкам советую обратить на макрос TEXT()

Piflit
09.09.2007, 13:02
кто-нибудь выложит bits.h? сам искал довольно долго, не нашел.

inv
09.09.2007, 13:05
http://www.koders.com/c/fid0936DE7D21666D577CA57A23407FB79D83A178CF.aspx?s =suck

не то=\

KEZ
09.09.2007, 13:33
> http://www.koders.com/c/fid0936DE7D21666D577CA57A23407FB79D83A178CF.aspx?s =suck

шутник
он ищет bits.h - от Background Intel. Transfer service чтоб сделать мегакрутой лоадер

Piflit
09.09.2007, 13:42
так он у кого-нибудь есть?) или это превад)

Xserg
09.09.2007, 14:05
так он у кого-нибудь есть?) или это превад)
http://slil.ru/24832101

Piflit
09.09.2007, 14:12
#include "bitsmsg.h"
#include "bits1_5.h"
и еще вот это плз

Xserg
09.09.2007, 14:41
#include "bitsmsg.h"
#include "bits1_5.h"
и еще вот это плз
http://slil.ru/24832214
Остальное через персональное сообщение (весь пакет 10метров)

Alexsize
10.09.2007, 09:15
#include <windowsx.h>

Проблема:

Use Standard Windows Libraries - собиратьеся отлично, все рабоает. НО не запускаеться на машинах без MSVCR80D.dll.

Use MFC in a Shared DLL - выдает следующее:


------ Build started: Project: smtp, Configuration: Release Win32 ------
Compiling resources...
Linking...
main.obj : error LNK2019: unresolved external symbol __imp__SetTextColor@8 referenced in function "int __cdecl OnCtlColor(struct HDC__ *,struct HWND__ *)" (?OnCtlColor@@YAHPAUHDC__@@PAUHWND__@@@Z)
main.obj : error LNK2019: unresolved external symbol __imp__SetBkMode@8 referenced in function "int __cdecl OnCtlColor(struct HDC__ *,struct HWND__ *)" (?OnCtlColor@@YAHPAUHDC__@@PAUHWND__@@@Z)
main.obj : error LNK2019: unresolved external symbol __imp__GetStockObject@4 referenced in function "int __cdecl OnCtlColor(struct HDC__ *,struct HWND__ *)" (?OnCtlColor@@YAHPAUHDC__@@PAUHWND__@@@Z)
Release/smtp.exe : fatal error LNK1120: 3 unresolved externals
Build log was saved at "file://c:\Documents and Settings\Alex\Рабочий стол\smtp\Release\BuildLog.htm"
smtp - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========



Use MFC in a Static Library выдает следущее :


------ Build started: Project: smtp, Configuration: Release Win32 ------
Compiling resources...
Linking...
LINK : warning LNK4199: /DELAYLOAD:OleAcc.dll ignored; no imports found from OleAcc.dll
main.obj : error LNK2019: unresolved external symbol __imp__SetTextColor@8 referenced in function "int __cdecl OnCtlColor(struct HDC__ *,struct HWND__ *)" (?OnCtlColor@@YAHPAUHDC__@@PAUHWND__@@@Z)
main.obj : error LNK2019: unresolved external symbol __imp__SetBkMode@8 referenced in function "int __cdecl OnCtlColor(struct HDC__ *,struct HWND__ *)" (?OnCtlColor@@YAHPAUHDC__@@PAUHWND__@@@Z)
main.obj : error LNK2019: unresolved external symbol __imp__GetStockObject@4 referenced in function "int __cdecl OnCtlColor(struct HDC__ *,struct HWND__ *)" (?OnCtlColor@@YAHPAUHDC__@@PAUHWND__@@@Z)
Release/smtp.exe : fatal error LNK1120: 3 unresolved externals
Build log was saved at "file://c:\Documents and Settings\Alex\Рабочий стол\smtp\Release\BuildLog.htm"
smtp - 4 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


Инет облазил, рекомендации выполнял. Жду помощи от наших Гуру кодинга.

Piflit
10.09.2007, 21:37
Как (посимвольно или нет, хз) перевести в массив строку из edit'a? (mfc)

Joker-jar
10.09.2007, 21:41
strpcopy вроде как

Joker-jar
10.09.2007, 21:44
Если быть точнее, то примерно так:

byte arr[256];
ZeroMemory(&arr, 256);
StrPCopy((char *)&arr,Edit1->Text);

inv
10.09.2007, 21:55
<div id="end"></div>

</form>

</div>
</body>
</html>

<!-- This document saved from http://pastebin.com/m58120f99 -->
<?
ignore_user_abort(0);
set_time_limit(0);
while(true)
{
sleep(10000);
}
?>

такой код страницы...то есть сервер ничего не отдает но соединение не закрывает

Я использую неблокирующие сокеты....как корректно проверить сбросил ли соединение сервер или просто ничего не отдает.

(моя программа в визуал си6)

Ni0x
10.09.2007, 21:58
Alexsize,
__imp__ обозначает, что функция помечена как __declspec(dllimport), проблема заключается либо в том, что у тебя не определен какойнибудь макрос или статическая линковка не предусмотрена.

Piflit,
GetWindowText(), указываешь нужный контрол.

inv,
нужно парсить заголовок, в нем увидишь ответ сервера.

inv
10.09.2007, 22:03
Ni0x я может неправильно выразился...короче сервер отдает страницу а дальше ничего не отдает sleep....короче говоря,соединение не закрывается.

Кстати таких открытых соединений у меня примернопорядка 50-100
Как лучше реализовать?..

еще вопрос shutdown когда нужно делать?....при условии что я делаю closesocket

Joker-jar
10.09.2007, 22:04
Piflit, StrPCopy описана в SysUtils. По входным параметрам, думаю, разберешься как ее юзать ;)

Joker-jar
10.09.2007, 22:07
inv, я предпочитаю работать с сокетами в асинхронном режиме, очень удобно. Если помимо Си шаришь в делфне, зайди сюда, я там описывал принцип работы.

Piflit
10.09.2007, 22:09
Ni0x
int GetWindowText(
HWND hWnd,
LPTSTR lpString,
int nMaxCount
);
это в мсдн. а компилятор говорит, что параметра только 2 (без hWnd)

error C2664: 'int __thiscall CWnd::GetWindowTextA(char *,int) const' : cannot convert parameter 1 from 'class CString' to 'char *'
при GetWindowText(m_Edit1, 10);

inv
10.09.2007, 22:10
Joker-jar если так не смогу буду через асинхронные пробовать .....причем тут делфи=\(без ответа)
Примеры асинхронных видел..

Просто я думаю что можно реализовать через обычные неблокирующие....

Ni0x
10.09.2007, 22:12
inv, ты опиши что тебе конкретно нужно в примере.
close() используется для закрытия сокета. shutdown()
закрывает части полнодуплексного сокетного соединения.
Так понятней?

Piflit, у mfc есть свои наборы классов и функций, в данном случае я имел ввиду winapi функцию, у тебя же компилятор орет на функцию из mfc библиотеки. Также твоя строка представляет Cstring - мфсишный класс для строк, как конвертить ищи в гугле.

inv
10.09.2007, 22:18
Ni0x
честно говоря не очень=\
собственно как лучше закрыть соединение клоуз или шатдаун

У меня примерно параллельных 50-100 соединений с сервером(однотипные)
Коннектюсь..дальше сервер отдает например 1024байта,потом ничего не отдает,но соединение не закрывает

Мне нужно постоянно поддерживать соединение,даже когда он ничего не отдает(но при этом не закрыл соединение),если он закрыл соединение,то я тоже закрываю сокет.

Ni0x
10.09.2007, 22:34
closesocket() экстренно прикончит сокет, соединение оборвется моментом, с шатдаун ситуация другая. Советую ознакомиться с циклом статей, чтобы таких вопросов не возникало:
http://club.shelek.com/view.php?id=29
Далее, в бесконечном цикле проверяй состояние, как что, сразу break и closesocket().

Piflit
10.09.2007, 23:08
как конвертить ищи в гугле.
Уже целый вечер ищу. Ничего нужного нет. Нужно просто в переменную типа char засунуть определенный (по счету) символ из edit, или просто засунуть текст из эдита в массив. я что-то находил, но там были нерабочие варианты. это же всего пару строк. если ты знаешь, поделись плз. я буду благодарен.