Вопрос № 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'е прочитать, но только с одним синтаксисом я не могу пока понять, как, и в какой последовательности нужно
использовать функции, и главное, с какими агрументами. Если кому-то будет не сложно - был бы очень рад, если бы кто-то написал
еще и про сокет-клиент, но сервер мне нужен в первую очередь. Заранее благодарен.
Отвечает: 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 (статус:
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();
}
Отвечает: 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 Комментарий
оценки: Спасибо. По второму способу всё и так работало, а первый попробую. Просто этот пример почти один в один
взят из Петзольда, но не работает :-/