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 - как используется и используется ли вообще на современном софте. (возможно, в директиве есть возможность указать ньюансы вызова, например порядок параметров. это "гипотенуза").  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							"Не слушайте никаких советов, в том числе и этот" (Сократ ?) 
						 | 
					 
				 
			 |  
		 
	 | 
	 |