LightSin
The question title sounds to me the same as "Convert banana into a pistol"... :-)
Постоялец
Offline
id/fm105
|
|
« : 10-10-2011 14:14 » |
|
Хочу вытащить " DWORD WINAPI SocketHandler(void*); " в отдельный файл tools, сейчас где и main() #include "stdafx.h" #include "Tools.h"
DWORD WINAPI SocketHandler(void*); /* SERVER */ int main(int argv,char **argc){.....CreateThread(0,0,&SocketHandler, (void*)csock , 0,0);......}
DWORD WINAPI SocketHandler(void* lp){.....}
| #pragma once char* myread_bin(char buff_way[255], int &buf_len); (функцию получилось вынести)
|
#include "Tools.h" #include "stdafx.h" char* myread_bin(char buff_way[255], int &buf_len){.............}
| #pragma once using namespace std; #include "targetver.h" #include <stdio.h> #include <tchar.h> #include <fstream> #include <iostream> #include <winsock2.h> #include <windows.h> #include <fcntl.h> #include <string.h> #include <stdlib.h> #include <errno.h>
|
только прошу, без умных слов, сделай... классами , статик.. как вот
|
|
« Последнее редактирование: 10-10-2011 14:31 от LightSin »
|
Записан
|
Lost in the jungle: 1c, PIC AVR, C++, Python flask, (no Java) JS . for fun: Live For Speed S2 Drift Edition, TeeWorlds
|
|
|
DneprSMV
|
|
« Ответ #1 : 10-10-2011 14:39 » |
|
extern попробуй. А какой компилятор, чем ругается ?
|
|
|
Записан
|
"Не слушайте никаких советов, в том числе и этот" (Сократ ?)
|
|
|
dark_rain
|
|
« Ответ #2 : 10-10-2011 15:31 » |
|
только прошу, без умных слов, сделай... классами , статик.. как вот Лично я бы делал именно так. А потом через объект класса к нему бы и постучался. Так будет правильно я думаю.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 10-10-2011 15:53 » |
|
LightSin, я ж тебе написал )) как-то так main.cpp #include "stdafx.h" #include "Tools.h" #include "helper.h"
/* SERVER */
int main(int argv,char **argc) { helper::SocketHandler(0); }
helper.h #pragma once class helper { public: static DWORD WINAPI SocketHandler(void*) { //... } }; helper.cpp #include "stdafx.h" #include "helper.h" DWORD WINAPI helper::SocketHandler(void*) { //... } Можно и с extern, но не нужно. Уже изобрели классы Добавлено через 1 минуту и 17 секунд:название класса у меня helper, назови по смыслу его
|
|
« Последнее редактирование: 10-10-2011 15:54 от Алексей1153 »
|
Записан
|
|
|
|
LightSin
The question title sounds to me the same as "Convert banana into a pistol"... :-)
Постоялец
Offline
id/fm105
|
|
« Ответ #4 : 10-10-2011 16:46 » |
|
ок, спасибо.. работает.
|
|
|
Записан
|
Lost in the jungle: 1c, PIC AVR, C++, Python flask, (no Java) JS . for fun: Live For Speed S2 Drift Edition, TeeWorlds
|
|
|
Вад
|
|
« Ответ #5 : 10-10-2011 20:32 » |
|
Или я чего-то не понимаю, или вы что-то усложняете. Надо было что, функцию в отдельный модуль вынести? Ну так, определение функции (тело, то есть) пишется в Tools.cpp, объявление функции дублируется в Tools.h, и далее Tools.h инклудится по мере надобности. Остальное - дело линковщика. М?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 10-10-2011 20:45 » |
|
Вад, можно и так, приписав в заголовке extern
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #7 : 11-10-2011 07:51 » |
|
Зачем здесь extern? Мы же о функции говорим?
|
|
|
Записан
|
|
|
|
DneprSMV
|
|
« Ответ #8 : 11-10-2011 13:34 » |
|
Вад, Может ошибаюсь, но зависит от того, в каком проекте собирается. Если компилятром-линкером по MAKE - надо указывать extern. (те функция внешняя по отношению к данному модулю, и не входит в состав стандартных и указаных для линковки библиотек). Если в построителе проекта (wizard) - то он глобальные ф-ии видит, кажется на основании входящих в проект модулей ........ IMHO. ps - ps ..... Долго думал .... проверил .... и хитрого файла #include "stdafx.h".
|
|
« Последнее редактирование: 11-10-2011 18:00 от DneprSMV »
|
Записан
|
"Не слушайте никаких советов, в том числе и этот" (Сократ ?)
|
|
|
Вад
|
|
« Ответ #9 : 11-10-2011 19:57 » |
|
Сколько писал проектов, собирая gcc/g++ при помощи make, всё как-то обходился без extern. И без precompiled headers. Как на чистом С, так и на плюсах. То есть, оно (extern), конечно, бывает надо, но, мне показалось, не в тривиальном случае вроде описанного.
Поскольку на этапе компиляции модуля в объектный файл должно хватать информации о сигнатуре (читай, объявления функции), а разрешать зависимости - это дело линковщика, и если ему на вход подают весь список нужных объектов, то разобраться, какая нужная функция почему-либо встретилась 2 раза, а какая - ни разу, -- с этим проблем быть не должно.
|
|
|
Записан
|
|
|
|
DneprSMV
|
|
« Ответ #10 : 12-10-2011 07:21 » |
|
Вад согласен. Давно(очень) использовал extern для увязки модулей C/main и ASM/func(). (С - extern, ASM - public). Но комиплятор-ликер были "еще те" Borland (Turbo) C++ 1.0 Для меня тоже не ясно, надо будет "вернуться к истокам" и подчитать док. по extern - как используется и используется ли вообще на современном софте. (возможно, в директиве есть возможность указать ньюансы вызова, например порядок параметров. это "гипотенуза").
|
|
|
Записан
|
"Не слушайте никаких советов, в том числе и этот" (Сократ ?)
|
|
|
|