Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Офф-топ

Страница: 1 | 2 |

 

  Вопрос: VC++ & Фатальная ошибка при компилировании Добавлено: 20.02.06 00:34  

Автор вопроса:  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



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

Ответить

Номер ответа: 2
Автор ответа:
 TERMIT



ICQ: 5297101 

Вопросов: 16
Ответов: 93
 Web-сайт: xtec.ru
 Профиль | | #2
Добавлено: 20.02.06 17:13
прописал получил следущее:

atl.lib ws2_32.lib /nologo /subsystem:windows /incremental:yes /pdb:";Debug/proga.pdb" /debug /machine:I386 /out:";Debug/proga.exe" /pdbtype:sept

Ответить

Номер ответа: 3
Автор ответа:
 TERMIT



ICQ: 5297101 

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

Ответить

Номер ответа: 4
Автор ответа:
 vito



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #4
Добавлено: 20.02.06 19:37
Какая опция компилятора?

Multi-threaded Debug DLL (/MDd)
Или
Single?

Для ATL нужна Multi.

Ответить

Номер ответа: 5
Автор ответа:
 TERMIT



ICQ: 5297101 

Вопросов: 16
Ответов: 93
 Web-сайт: xtec.ru
 Профиль | | #5
Добавлено: 20.02.06 21:43
Вот опция компилятора:

/nologo /MDd /w /W0 /GX /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_AFXDLL" /FR";Debug/" /Fp";Debug/proga.pch" /YX /Fo";Debug/" /Fd";Debug/" /FD /ZI /GZ /c

Ответить

Номер ответа: 6
Автор ответа:
 vito



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #6
Добавлено: 20.02.06 22:04
Вроде все нормально.
 /MDd

Еще раз, проблемы начались сразу после подключения ATLBASE.H?

И какой проект win32, mfs?

Ответить

Номер ответа: 7
Автор ответа:
 vito



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #7
Добавлено: 20.02.06 22:28
Мне кажется есть только один выход - покажи исходники.

Ответить

Номер ответа: 8
Автор ответа:
 TERMIT



ICQ: 5297101 

Вопросов: 16
Ответов: 93
 Web-сайт: xtec.ru
 Профиль | | #8
Добавлено: 20.02.06 22:58
>Еще раз, проблемы начались сразу после подключения ATLBASE.H?

Дык нет же, смотри я накодил вот что:

CRegKey key;
if(key.Open(HKEY_CURRENT_USER,"Software\\MYY";)!=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



Разработчик Offline Client

Вопросов: 23
Ответов: 879
 Web-сайт: softvito.narod2.ru
 Профиль | | #9
Добавлено: 20.02.06 23:18
TERMIT

На консоли (win32 console) проверил твой код - никаких проблем??

Может тебе невый проект создать? Глючит что - нить?
А тип проекта в свойствах.

Ответить

Номер ответа: 10
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #10 Добавлено: 20.02.06 23:37
 TERMIT
Создаешь себе проблемы на ровном месте :)
Почему нельзя традиционным способом сделать?

//================= возвращает 0 если ошибка,
//                  или 1 если успешно, данные заполняются в буфер lpOutput
int RegGetDwordValue (HKEY RootKey, LPCTSTR lpSubKey, LPCTSTR lpValueName, LPDWORD lpOutput){
    ;DWORD           data_len;
    HKEY            hHandleKey;
    LONG            result;
    ;DWORD           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;
    
}

//===========================================
    ;DWORD   regValue;
    char    buffer[16];

    if ( RegGetDwordValue( HKEY_LOCAL_MACHINE, "Software\\MYY", "port", &regValue ) ){
        wsprintf ( buffer, "%d", regValue );
        MessageBox (0, buffer, "Success", 0);
    }
    else
        MessageBox (0, "Error", 0, 0);


И никаких проблем с левыми atl'ами.

Ответить

Номер ответа: 11
Автор ответа:
 TERMIT



ICQ: 5297101 

Вопросов: 16
Ответов: 93
 Web-сайт: xtec.ru
 Профиль | | #11
Добавлено: 21.02.06 00:55
Эххх, тяжко блин, не читает он что то выдает ошибка постоянно ну месага срабатывает на ИНАЧЕ, фигова =(...


Ок можите подсказать как проще всего сделать построчное чтение файла... т.е. я хчоу сделать конфиг в файле и на каждой строке будет своя настройка к примеру:

port
name
tratata


99
COOL
WAW

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

HOOLIGAN, а насчет использования других функций ты прав! обязательно разберусь с этой темой, работа с реестром без либ доп. лучше безусловно! разберусь позже с этим вот только закончу с этой прогой...


ВСЕМ ОГРОМНЕЙШЕЕ СПАСИБА! VBNET ВСЕГДА ВЫРУЧАЕТ :D

Ответить

Номер ответа: 12
Автор ответа:
 HOOLIGAN



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

Ответить

Номер ответа: 13
Автор ответа:
 TERMIT



ICQ: 5297101 

Вопросов: 16
Ответов: 93
 Web-сайт: xtec.ru
 Профиль | | #13
Добавлено: 21.02.06 15:53
Да не только две, еще нужно проверить создан ли раздел этот в реестре + считать что то вчера не получилось я же написал... Короче нада вот что:

[:ЗАПИСЬ:]
Проверять создан ли раздел такой в реестре
Если нет тогда создавать его и записывать туда данные
Записывать двоичные данные (REG_DWORD)
Записывать (REG_SZ)

[:ЧТЕНИЕ:]
Читать данные с реестра выше указанные ДВОРДЫ И REG_SZ, и если нет таких данных ну пустые тогда там уже вызов конфигуратора будет у меня стоять... главное короче нада считать.

Вот такие нужны темы, если не трудно пришли на termit[suKbaka]list.ru свой reg.cpp или что то по этой теме хотя бы... Захотелось разобраться до конца чтобы в следущие разы не парица +)

Заранее спкасиба!

Ответить

Номер ответа: 14
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #14 Добавлено: 21.02.06 22:05
Отослал. Там 6 функций для чтения/записи REG_SZ, REG_DWORD, REG_BINARY.
При чтении:
Ф-ции возвращают количество считанных байт (длину строки, или длину массива байт или 4 для дворда)
Если ошибка чтения (например нет ключа или параметра) - возвращают ноль.

При записи:
Ф-ции создают ключ/параметр, если его не было и записывают в него. Если ключ был, то просто запись в него.
Если запись успешно - возвращают 1, если ошибка - возвращают ноль.

Все ф-ции принимают в качестве параметров адреса переменных. Т.е. нужно передавать адрес переменной для чтения из неё, или для записи в неё.
Примерно так:
    int MyDwordValue;

    MyDwordValue = 123456;
    RegSetDwordValue ("MyKey", "MyParameter", &MyDwordValue); //запись 123456 в двод-параметр

    char     MyString[256];
    if ( RegGetStringValue("MyKey", "MyStringParam", MyString) )
        MessageBox (0, MyString, 0, 0);

Ответить

Номер ответа: 15
Автор ответа:
 TERMIT



ICQ: 5297101 

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


ВСЕМ СПАСИБО! Респекта Хулигану

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам