Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 453
от 01.07.2006, 23:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 350, Экспертов: 45
В номере:Вопросов: 4, Ответов: 7


Вопрос № 47301: Здаравствуйте, эксперты. Мне было бы очень интересно узнать, как на C++ и чистом WinAPI написать сервер-сокет (с помощью WSAStartup, WSACleanup, и т.д.). Интересно было бы посмотреть какой-нибудь исходник, в котором сокет ждет подключения клиента, по...
Вопрос № 47311: Как преобразовать число в строку с завершающим нулём? ...
Вопрос № 47371: Добрый день, уважаемые эксперты. Подскажите, пожалуйста, где в Visual C++(MFC- приложение) можно найти путь к каталогу программы (что-то вроде argv[0], только для Win-приложения)? ...
Вопрос № 47412: Здравствуйте! У меня возникла следующая проблема... Visual Studio 2005 так вот - пытаюсь разобраться в DLL... в программе не видна (не находит) функцию Summ(int, int)... //------------------------------------------------- ...

Вопрос № 47.301
Здаравствуйте, эксперты. Мне было бы очень интересно узнать, как на C++ и чистом WinAPI написать сервер-сокет (с помощью WSAStartup, WSACleanup, и т.д.). Интересно было бы посмотреть какой-нибудь исходник, в котором сокет ждет подключения клиента, подключает его при запросе (имею ввиду accept, если неправильно выразился), принимает запросы, и отвечает на них до тех пор, пока клиент не разорвет соединение. Когда это произойдет - сокет снова начинает слушать. Интересует сам пример, синтаксис я могу и в MSDN'е прочитать, но только с одним синтаксисом я не могу пока понять, как, и в какой последовательности нужно использовать функции, и главное, с какими агрументами. Если кому-то будет не сложно - был бы очень рад, если бы кто-то написал еще и про сокет-клиент, но сервер мне нужен в первую очередь. Заранее благодарен.
Отправлен: 26.06.2006, 02:06
Вопрос задал: Васильков Вадим (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: gitter
Здравствуйте, Васильков Вадим!
Здесь http://tangentsoft.net/wskfaq/ очень подробный FAQ по Winsock с примерами.
Здесь http://www.sockaddr.com/ExampleSourceCode.html Очень много примеров (есть пример сервиса).
Не забываем про CodeGuru http://www.codeguru.com/cpp/i-n/network/
http://www.piter-press.ru/library/978588782088/pinternet.phtml - это книга К. Джамса, К. Коуп. Программирование для Internet в среде Windows (от Питер-пресс, правда, нужно зарегестрироваться, зато будет бесплатный доступ к библиотеке Питер-пресс)

Удачи!

Ответ отправил: gitter (статус: 10-ый класс)
Ответ отправлен: 26.06.2006, 10:09


Вопрос № 47.311
Как преобразовать число в строку с завершающим нулём?
Отправлен: 26.06.2006, 03:53
Вопрос задал: Ahab (статус: 2-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Jeka911
Здравствуйте, Ahab!

sprintf(string,"%d",value);
---------
Шахтер - чемпион!!!
Ответ отправил: Jeka911 (статус: 5-ый класс)
Ответ отправлен: 26.06.2006, 04:04
Оценка за ответ: 5
Комментарий оценки:
Герберт Шилд "Полный справочник по С" этой функции нету... или я проглядел, что-ли :(

Отвечает: X-MAN
Здравствуйте, Ahab!
char *buffer[10];
int number = 58;
itoa(number, buffer, 10);

Преобразует число number в строку и помещает ответ в buffer. Последний параметр означает что число будет в десятеричной системе.
---------
Оптимисты начинают день с имунеле, реалисты - с кофе, а пессимисты - с водки!
Ответ отправил: X-MAN (статус: 7-ой класс)
Ответ отправлен: 26.06.2006, 05:11
Оценка за ответ: 5
Комментарий оценки:
Вот это и нужно... не мог я проглядеть, в "полном справочнике" Шилда atoi, atol и т.п. есть, а про наоборот не говорится ничего... то ли переводчики тупят... то ли я :)))

Отвечает: MiCumi - Acpx
Здравствуйте, Ahab!
Строки по сути завешаются нулем перевод в строку в билдере.
AnsiString(10);
String(10);
IntToStr(10);

---------
быть тем кем желаешь. волей не поколебим. к познанию стремящийся
Ответ отправил: MiCumi - Acpx (статус: 1-ый класс)
Ответ отправлен: 26.06.2006, 14:23
Оценка за ответ: 5
Комментарий оценки:
Хм.. неправильно выразился, я имел ввиду стандартный "С" тип строки - массив символов с завершающим нулём, а не добавленные в MVS | CB типы "string" и т.п.


Вопрос № 47.371
Добрый день, уважаемые эксперты.
Подскажите, пожалуйста, где в Visual C++(MFC- приложение) можно найти путь к каталогу программы (что-то вроде argv[0], только для Win-приложения)?
Отправлен: 26.06.2006, 16:10
Вопрос задал: __Max (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: gitter
Здравствуйте, __Max!
Вам необходимо воспользоваться функцией GetCurrentDirectory

#define BUFSIZE MAX_PATH

TCHAR Buffer[BUFSIZE];//искомый путь
DWORD dwRet;

dwRet = GetCurrentDirectory(BUFSIZE, Buffer);

Ответ отправил: gitter (статус: 10-ый класс)
Ответ отправлен: 26.06.2006, 16:22
Оценка за ответ: 2
Комментарий оценки:
Не работает - он возвращает путь к последнему открытому в программе каталогу. Надо бы, чтобы всегда путь к программе выдавал

Отвечает: Straight
Здравствуйте, __Max!
Попробуйте GetModuleFileName с NULL в качестве дескриптора модуля
http://sources.ru/msdn/library/getmodulefilename.shtml
Ответ отправил: Straight (статус: Студент)
Ответ отправлен: 26.06.2006, 16:23
Оценка за ответ: 5
Комментарий оценки:
То, что надо, но выдает полный путь к exe-файлу: нельзя ли получить путь к каталогу проги?


Вопрос № 47.412
Здравствуйте!
У меня возникла следующая проблема...
Visual Studio 2005
так вот - пытаюсь разобраться в DLL...
в программе не видна (не находит) функцию Summ(int, int)...

//-------------------------------------------------
// SecondDLL.cpp
// текст DLL
//-------------------------------------------------
#include <windows.h>
#define EXPORT extern "C" __declspec(dllexport)
int WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE;
}
EXPORT int CALLBACK Summ(int a, int b)
{
int summ(a + b);
return summ;
}
================================================
//-------------------------------------------------
// main.cpp
// основная прога
//-------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <conio.h>
typedef int (WINAPI *PFSUMM)(int, int);
void main(void)
{
HINSTANCE hLibrary;
PFSUMM Summ;
if((hLibrary = LoadLibrary("SecondDLL.dll")) == NULL)
printf("DLL not found");
else
if((Summ = (PFSUMM)GetProcAddress(hLibrary, "Summ")) == NULL)
// пробовал и "_Summ" - результат тот же :(
printf("Proc not found");
else
printf("2+3=%i", Summ(2, 3));
FreeLibrary(hLibrary);
getch();
}
Отправлен: 26.06.2006, 23:00
Вопрос задал: Селиванов Александр Владимирович (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Red Devil
Здравствуйте, Селиванов Александр Владимирович!
Собственно говоря у тебя есть два пути.

1) Нужно в файле .def в dll экспортировать функцию.
В dll нужно создать файл .def. И в нем написать:
EXPORTS
<название функции>
Название должно писать без всяких лишних знаков, например:
EXPORTS
MouseProc
MyProccess
Exit

2) Использовать lib файл. После создание dll появляется сама dll и lib файл к ней. В VS 2005 не знаю где, в VS 6 alt+F7, вкладка link - object/library modules, здесь вписываются допольнительные lib'ы. lib файл естественно нужно положить либо в папку VSroot/VC/lib, либо в папку где находится проект, который dll использует.
Кроме того такое объявление не совсем правильное, для этого случая, не для первого. Нужно создавать единый файл интерфейса *.h, который использовать при комплияции dll и программы.
---------
Есть 10 типов людей: те, кто знаком с двоичной системой, и те, кто нет.
Ответ отправил: Red Devil (статус: Студент)
Ответ отправлен: 27.06.2006, 08:32
Оценка за ответ: 5
Комментарий оценки:
Спасибо. По второму способу всё и так работало, а первый попробую.
Просто этот пример почти один в один взят из Петзольда, но не работает :-/


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное