На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> error LNK2005 (vs6) , нуб вопрос
    Написал программульку которая чего-то там считает(физику разную), основываясь на библиотеках некоего CLHep (может кто физик- о такой штуке слышал).
    В console application она у меня все считает.
    Потом решил попробовать Гуи добавить...в MFC я полный нуб, поэтому пошел на firststeps и взял из первых шагов в разделе Visual C++ примерчик, который кнопочки рисует. Ну долго не думая, добавил этот примерчик в мой воркспейс и в нажатии на кнопку просто вызвал мою прогу
    ExpandedWrap disabled
      void CMyButton::OnLButtonDblClk(UINT, CPoint)
      {
          Generate::Run1(mean,deviat,nEvents,nBins,maxQ,Qinv_user,chiSq,Corr); // вызов моей рутины
          MoveWindow(CRect(120,100,220,150),TRUE);// то что предлагают сделать в примере на firststeps
      }

    Ну и понятное дело выскочила куча ошибок LNK2005(куда ж без них) типа вот таких
    ExpandedWrap disabled
       
      LIBCMTD.lib(dbgheap.obj) : error LNK2005: _free already defined in msvcrtd.lib(MSVCRTD.dll)
      libcpmtd.lib(iostream.obj) : error LNK2005: "public: __thiscall std::ios_base::Init::~Init(void)" (??1Init@ios_base@std@@QAE@XZ) already defined in msvcprtd.lib(MSVCP60D.dll)
      LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in msvcrtd.lib(cinitexe.obj)
      svcrtd.lib(MSVCRTD.dll) : error LNK2005: __setmbcp already defined in LIBCMTD.lib(mbctype.obj)


    Ну я по колесу постучал, дворники протер :) (мультитритед везде поставил, перебилдил, прекомпайлед хедерс убрал) а ошибки так и остались.

    Причем как я понимаю MSVCRTD.dll и LIBCMTD.lib лежат одна в папке windows, другая в библиотеках visual studio(поиск фарева).

    В чем может быть ошибка? может кто на заре своей деятельности сталкивался? или в мфц все принципиально не так делается?
    Сообщение отредактировано: pushistik -
      Update:
      написал /nodefaultlib:"msvcrtd.lib" /nodefaultlib:"msvcirtd.lib" /nodefaultlib:"msvcprtd.lib"- ошибки ушли, только появились ворнинги
      ExpandedWrap disabled
         
        LINK : warning LNK4049: locally defined symbol ""public: __thiscall std::_Winit::_Winit(void)" (??0_Winit@std@@QAE@XZ)" imported

      как это будет влиять на ход программы?
      Сообщение отредактировано: pushistik -
        Может быть есть смысл добавить GUI без использования MFC. То есть, я имею ввиду написать скелет приложения, компилировать его как win32, а все элементы вставлять с помощью CreateWindowEx. Например:

        ExpandedWrap disabled
          #include <windows.h>
           
          LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);    
              char szWinName[]="MyWin";
           
          int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode)
          {
              HWND hwnd;
              MSG msg;
              WNDCLASSEX wcl;
           
           
              wcl.cbSize=sizeof(WNDCLASSEX);
              wcl.hInstance=hThisInst;                        
              wcl.lpszClassName=szWinName;                    
              wcl.lpfnWndProc=WindowFunc;                    
              wcl.style=0;                                    
           
              wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);      
              wcl.hIconSm=NULL;                              
              wcl.hCursor=LoadCursor(NULL,IDC_ARROW);        
              wcl.lpszMenuName=NULL;                          
              wcl.cbClsExtra=0;                              
              wcl.cbWndExtra=0;
              
              wcl.hbrBackground=(HBRUSH) GetStockObject(BLACK_BRUSH);
              
              if(!RegisterClassEx(&wcl)) return 0;
              
              
              /*hwnd=CreateWindow(szWinName, "Title",
                  WS_POPUP|WS_SYSMENU, 0, 0,
                  GetSystemMetrics(SM_CXSCREEN),
                  GetSystemMetrics(SM_CYSCREEN),
                  0, 0, hThisInst, 0);*/
           
              hwnd = CreateWindow(                            
                  szWinName,                                  
                  "Skelet for Uchebnik",                      
                  WS_OVERLAPPEDWINDOW,                        
                  CW_USEDEFAULT,                              
                  CW_USEDEFAULT,                              
                  CW_USEDEFAULT,                              
                  CW_USEDEFAULT,                                  
                  NULL,                                      
                  NULL,                                      
                  hThisInst,                                  
                  NULL                                        
              );
              
              CreateWindowEx(NULL,"button","1",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,10,10,70,70,hwnd,(HMENU)100,hThisInst,NULL);
              CreateWindowEx(NULL,"edit", "Хрен",
                   WS_CHILD | WS_VISIBLE | WS_BORDER ,
                       100, 50, 200, 20, hwnd, (HMENU)111, hThisInst, NULL);
              
              ShowWindow(hwnd,nWinMode);
              UpdateWindow(hwnd);
                  
              while(GetMessage(&msg, NULL, 0,0))
              {
                  TranslateMessage(&msg);
                  DispatchMessage(&msg);
              }
              return msg.wParam;
          }
              
          LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
          {
              switch(message){
              case WM_PAINT:                                  
                  UpdateWindow(hwnd);    
                  break;
              case WM_DESTROY:                                
                  PostQuitMessage(0);
                  break;  
              default:        
                  return DefWindowProc(hwnd, message, wParam,lParam);
              }
              return 0;
          }


        А прогу твою запихать/внедрить в этот шаблон (я имею ввиду код). Не бей, если я что-то не так понял. С похмелья туго соображаю...

        :blink:

        Добавлено в :
        Ну если warningi, то это уже не так страшно. Программа конечно будет запускаться, но вот будет ли работать правильно? Проверь, если все верно, то не стоит переживать... Блин, башка болит
        :unsure:

        M
        Пользуйтесь тегом кода.
        Предупреждение не ставлю т.к. новичок.
        Подсказка в ссылке "Помощь по кодам форума" слева формы ответа.
        Leprecon
          спасибо за код, ща попробую:)
            А может дело не в мультитреде?

            LNK2005 возникает больше, чем в одном случае...
              кто знает...у меня вроде конфликтовал статическая библиотека с динамическим приложением :wacko: -> отрубил библиотеки- вроде не ругается, окромя варнинга
              Сообщение отредактировано: pushistik -
                я уж где-то раньше писала, так что извините за повторение, в любом случае не вредит в dependency walker посмотрет, там "какие" и "где" библиотеки лежат. варнинги тож не дело...
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0514 ]   [ 16 queries used ]   [ Generated: 18.11.25, 21:49 GMT ]