Страница: 1 | 2 | 
		
		 
			   
			 
			 
			 
			 
			
 
  
		
     
  
    
Вопрос: VC++ & Фатальная ошибка при компилировании
     
    
Добавлено: 20.02.06 00:34
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
     TERMIT | Web-сайт: xtec.ru | ICQ: 5297101
 TERMIT | Web-сайт: xtec.ru | ICQ: 5297101 
      
       
  
Здраствуйте знатоки, тут такая хистори в общем. Подключил библиотеку ATLBASE.H, и работаю с CRegKey
 
    
Стоило только откомпилить и на тебе повалилось, вот кусок ошибок что выдает:
...
server.obj : error LNK2001: unresolved external symbol "public: long __thiscall ATL::CRegKey::Close(void)" (?Close@CRegKey@ATL@@QAEJXZ)
Debug/proga.exe : fatal error LNK1120: 7 unresolved externals
Error executing link.exe.
Помогие чем сможите, я потратил 4 часа в поисках инфы подобной об этой ошибке конкретно ничего нет +(. Может можно как то сделать ну к примеру как я делал с таймером когда о нвыдавал подобную бяку:
#pragma comment(lib, "winmm") 
Плиззз помогите...
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 17
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа: HOOLIGAN
 HOOLIGAN

Вопросов: 0
Ответов: 1066
      
 Профиль |  | #1
       
Добавлено:  20.02.06 01:31
       
    
       
  
#pragma comment(lib,....) не всегда помогает. Например в DDK эта фича не работает.
 
    
В этом случае попробуй напрямую в опциях командной строки линкера указывать свою либу.
Либо в makefile или sources - что там у тебя используется.
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа: TERMIT
 TERMIT










ICQ: 5297101 
Вопросов: 16
Ответов: 93
      
 Web-сайт:  
 Профиль |  | #2
      
Добавлено:  20.02.06 17:13
       
    
       
  
прописал получил следущее:
 
    
atl.lib ws2_32.lib /nologo /subsystem:windows /incremental:yes /pdb:" ebug/proga.pdb" /debug /machine:I386 /out:"
ebug/proga.pdb" /debug /machine:I386 /out:" ebug/proga.exe" /pdbtype:sept
ebug/proga.exe" /pdbtype:sept 
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа: TERMIT
 TERMIT










ICQ: 5297101 
Вопросов: 16
Ответов: 93
      
 Web-сайт:  
 Профиль |  | #3
      
Добавлено:  20.02.06 17:15
       
    
       
  
Сори раньше времени на кнопку тыркнул а редактирования нету... в общем нифига не изменилось +(... обычно что же делать то теперь... дрругие функции юзать не могу, нельзя.... +(
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа: vito
 vito









Разработчик Offline Client
Вопросов: 23
Ответов: 879
      
 Web-сайт:  
 Профиль |  | #4
      
Добавлено:  20.02.06 19:37
       
    
       
  
Какая опция компилятора?
 
    
Multi-threaded Debug DLL (/MDd)
Или
Single?
Для ATL нужна Multi.
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа: TERMIT
 TERMIT










ICQ: 5297101 
Вопросов: 16
Ответов: 93
      
 Web-сайт:  
 Профиль |  | #5
      
Добавлено:  20.02.06 21:43
       
    
       
  
Вот опция компилятора:
 
    
/nologo /MDd /w /W0 /GX /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_AFXDLL" /FR" ebug/" /Fp"
ebug/" /Fp" ebug/proga.pch" /YX /Fo"
ebug/proga.pch" /YX /Fo" ebug/" /Fd"
ebug/" /Fd" ebug/" /FD /ZI /GZ /c
ebug/" /FD /ZI /GZ /c 
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа: vito
 vito









Разработчик Offline Client
Вопросов: 23
Ответов: 879
      
 Web-сайт:  
 Профиль |  | #6
      
Добавлено:  20.02.06 22:04
       
    
       
  
Вроде все нормально.
 
    
 /MDd 
Еще раз, проблемы начались сразу после подключения ATLBASE.H?
И какой проект win32, mfs?
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа: vito
 vito









Разработчик Offline Client
Вопросов: 23
Ответов: 879
      
 Web-сайт:  
 Профиль |  | #7
      
Добавлено:  20.02.06 22:28
       
    
       
  
Мне кажется есть только один выход - покажи исходники.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа: TERMIT
 TERMIT










ICQ: 5297101 
Вопросов: 16
Ответов: 93
      
 Web-сайт:  
 Профиль |  | #8
      
Добавлено:  20.02.06 22:58
       
    
       
  
>Еще раз, проблемы начались сразу после подключения ATLBASE.H?
 
    
Дык нет же, смотри я накодил вот что:
CRegKey key;
if(key.Open(HKEY_CURRENT_USER,"Software\\MYY" !=ERROR_SUCCESS)
!=ERROR_SUCCESS)
		if(key.Open(HKEY_LOCAL_MACHINE,"Software\\MYY" 
		   !=ERROR_SUCCESS)
		return false;
	char s[512];
	DWORD len=512;
	if(key.QueryValue(s,"port",&len)!=ERROR_SUCCESS)
		return false;
	port=s;
и он выдает вот такую шнягу, как только я эти функции коментирую ну работы с реестром... так сразу все ок! но мне именно  так нужно сделать! +(
На будущее не подскажеш где можно посматреть тип проекта, прост оу других исходников подобных гляну, а вообще win32
		
	  
			 
	
		 
    
       
    
Номер ответа: 9 
      
Автор ответа: vito
 vito









Разработчик Offline Client
Вопросов: 23
Ответов: 879
      
 Web-сайт:  
 Профиль |  | #9
      
Добавлено:  20.02.06 23:18
       
    
       
  
TERMIT
 
    
На консоли (win32 console) проверил твой код - никаких проблем??
Может тебе невый проект создать? Глючит что - нить? 
А тип проекта в свойствах. 
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа: HOOLIGAN
 HOOLIGAN

Вопросов: 0
Ответов: 1066
      
 Профиль |  | #10
       
Добавлено:  20.02.06 23:37
       
    
       
  
 TERMIT
 
    
Создаешь себе проблемы на ровном месте  
Почему нельзя традиционным способом сделать?
//                  или 1 если успешно, данные заполняются в буфер lpOutput
int RegGetDwordValue (HKEY RootKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPDWORD lpOutput){
     WORD           data_len;
WORD           data_len;
    HKEY            hHandleKey;
    LONG            result;
     WORD           dwType;
WORD           dwType;
    
    data_len=4;
    result=RegOpenKeyEx(RootKey, lpSubKey, NULL,KEY_QUERY_VALUE, & hHandleKey);
    if (ERROR_SUCCESS == result){
        result=RegQueryValueEx(hHandleKey, lpValueName, NULL, &dwType, (LPBYTE) lpOutput, &data_len);
        result=RegQueryValueEx(hHandleKey, lpValueName, NULL, &dwType, (LPBYTE) lpOutput, &data_len);
        if (ERROR_SUCCESS == result && data_len!=0){
            if (dwType==REG_DWORD){
                RegCloseKey((HKEY)hHandleKey);
                return data_len;
                }
            }
        }
    RegCloseKey((HKEY)hHandleKey);
    return 0;
    
}
//===========================================
     WORD   regValue;
WORD   regValue;
    char    buffer[16];
    if ( RegGetDwordValue( HKEY_LOCAL_MACHINE, "Software\\MYY", "port", ®Value ) ){
        wsprintf ( buffer, "%d", regValue );
        MessageBox (0, buffer, "Success", 0);
    }
    else
        MessageBox (0, "Error", 0, 0);
И никаких проблем с левыми atl'ами.
		
	  
			 
	
		 
    
       
    
Номер ответа: 11 
      
Автор ответа: TERMIT
 TERMIT










ICQ: 5297101 
Вопросов: 16
Ответов: 93
      
 Web-сайт:  
 Профиль |  | #11
      
Добавлено:  21.02.06 00:55
       
    
       
  
Эххх, тяжко блин, не читает он что то выдает ошибка постоянно ну месага срабатывает на ИНАЧЕ, фигова =(...
 
    
Ок можите подсказать как проще всего сделать построчное чтение файла... т.е. я хчоу сделать конфиг в файле и на каждой строке будет своя настройка к примеру:
port
name
tratata
99
COOL
WAW
вот... ну и конечно же запись в файл. Конфиг обычным файлом хочу сделать с доступом как у текстового обычного. Вот мож кто подкинет простенькие функции (готовые для использования), буду признателен.
HOOLIGAN, а насчет использования других функций ты прав! обязательно разберусь с этой темой, работа с реестром без либ доп. лучше безусловно! разберусь позже с этим вот только закончу с этой прогой...
ВСЕМ ОГРОМНЕЙШЕЕ СПАСИБА! VBNET ВСЕГДА ВЫРУЧАЕТ :D
		
	  
			 
	
		 
    
       
    
Номер ответа: 12 
      
Автор ответа: HOOLIGAN
 HOOLIGAN

Вопросов: 0
Ответов: 1066
      
 Профиль |  | #12
       
Добавлено:  21.02.06 01:17
       
    
       
  
А зачем в файле? Можно ведь и в реестре, т.е. полностью заменить этот CReg::Key. 
 
    
Всего-то 4 функции - читать/писать строковые данные и читать/писать дворды.
У меня они оформлены отдельным файлом reg.cpp, когда нужно работать с реестром - я его в проект подключил и всё  
И #pragma comment(lib, advapi32.lib) работает безупречно. Это вам не атл.
		
	  
			 
	
		 
    
       
    
Номер ответа: 13 
      
Автор ответа: TERMIT
 TERMIT










ICQ: 5297101 
Вопросов: 16
Ответов: 93
      
 Web-сайт:  
 Профиль |  | #13
      
Добавлено:  21.02.06 15:53
       
    
       
  
Да не только две, еще нужно проверить создан ли раздел этот в реестре + считать что то вчера не получилось я же написал... Короче нада вот что:
 
    
[:ЗАПИСЬ:]
Проверять создан ли раздел такой в реестре
Если нет тогда создавать его и записывать туда данные
Записывать двоичные данные (REG_DWORD)
Записывать (REG_SZ)
[:ЧТЕНИЕ:]
Читать данные с реестра выше указанные ДВОРДЫ И REG_SZ, и если нет таких данных ну пустые тогда там уже вызов конфигуратора будет у меня стоять... главное короче нада считать.
Вот такие нужны темы, если не трудно пришли на termit[suKbaka]list.ru свой reg.cpp или что то по этой теме хотя бы... Захотелось разобраться до конца чтобы в следущие разы не парица +)
Заранее спкасиба!
		
	  
			 
	
		 
    
       
    
Номер ответа: 14 
      
Автор ответа: HOOLIGAN
 HOOLIGAN

Вопросов: 0
Ответов: 1066
      
 Профиль |  | #14
       
Добавлено:  21.02.06 22:05
       
    
       
  
Отослал. Там 6 функций для чтения/записи REG_SZ, REG_DWORD, REG_BINARY.
 
    
При чтении:
Ф-ции возвращают количество считанных байт (длину строки, или длину массива байт или 4 для дворда)
Если ошибка чтения (например нет ключа или параметра) - возвращают ноль.
При записи:
Ф-ции создают ключ/параметр, если его не было и записывают в него. Если ключ был, то просто запись в него.
Если запись успешно - возвращают 1, если ошибка - возвращают ноль.
Все ф-ции принимают в качестве параметров адреса переменных. Т.е. нужно передавать адрес переменной для чтения из неё, или для записи в неё.
Примерно так:
    MyDwordValue = 123456;
    RegSetDwordValue ("MyKey", "MyParameter", &MyDwordValue); //запись 123456 в двод-параметр
    char     MyString[256];
    if ( RegGetStringValue("MyKey", "MyStringParam", MyString) )
        MessageBox (0, MyString, 0, 0);
		
	  
			 
	
		 
    
       
    
Номер ответа: 15 
      
Автор ответа: TERMIT
 TERMIT










ICQ: 5297101 
Вопросов: 16
Ответов: 93
      
 Web-сайт:  
 Профиль |  | #15
      
Добавлено:  22.02.06 17:19
       
    
       
  
Спасибо за функции Хулиган, проверю на днях сейчаз убечу дрюЧю +) траблы с оценками небольшие гы. Но думаю в этот раз разберусь с реестром точна. Кстате у меня когда я помниш писал мол срабатывает: "}else{" выдавалось у меня тогда сообщение но без НУЛЯ там было число не помню точно че то типа - 83131 это значит кол-во символов в масике он вернул мне? или как ьбы это понять вообще? почему тогда он сработало "}else{". В прочем я вопросов глупых много задаю...
 
    
ВСЕМ СПАСИБО! Респекта Хулигану