2012-04-14 9 views
5

Używanie Visual Studio Express 2010 Zrobiłem projekt Windows z opcjami Windows Application i Empty Project. Potem próbował following code snippet z tutoriali MSDN Windows:Nierozwiązane symbole zewnętrzne __RTC_ * w samouczku programowania Windows

#include <windows.h> 
#include <shobjidl.h> 

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) 
{ 
    HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
     COINIT_DISABLE_OLE1DDE); 
    if (SUCCEEDED(hr)) 
    { 
     IFileOpenDialog *pFileOpen; 

     // Create the FileOpenDialog object. 
     hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, 
       IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen)); 

     if (SUCCEEDED(hr)) 
     { 
      // Show the Open dialog box. 
      hr = pFileOpen->Show(NULL); 

      // Get the file name from the dialog box. 
      if (SUCCEEDED(hr)) 
      { 
       IShellItem *pItem; 
       hr = pFileOpen->GetResult(&pItem); 
       if (SUCCEEDED(hr)) 
       { 
        PWSTR pszFilePath; 
        hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath); 

        // Display the file name to the user. 
        if (SUCCEEDED(hr)) 
        { 
         MessageBox(NULL, pszFilePath, L"File Path", MB_OK); 
         CoTaskMemFree(pszFilePath); 
        } 
        pItem->Release(); 
       } 
      } 
      pFileOpen->Release(); 
     } 
     CoUninitialize(); 
    } 
    return 0; 
} 

mam następujące błędy:

1>------ Rebuild All started: Project: Test05, Configuration: Debug Win32 ------ 
1> Test05.cpp 
1>Test05.obj : error LNK2019: unresolved external symbol @[email protected] 
referenced in function [email protected] 
1>Test05.obj : error LNK2019: unresolved external symbol __RTC_CheckEsp referenced in 
function [email protected] 
1>Test05.obj : error LNK2001: unresolved external symbol __RTC_Shutdown 
1>Test05.obj : error LNK2001: unresolved external symbol __RTC_InitBase 
1>LINK : error LNK2001: unresolved external symbol _wWinMainCRTStartup 

Co tu się dzieje? Najlepiej mogę powiedzieć coś na temat wWinMain, ale jest ono kopiowane bezpośrednio ze strony.

Kompilatory wydają mi się o wiele trudniejsze niż programowanie. Zdecydowałem się na Visual C++ po wypróbowaniu kilku innych (głównie bloków kodu), ale ponieważ Visual C++ wydaje się mieć najwięcej wsparcia (lub przynajmniej większość użytkowników) uznałem, że to lepsze niż nigdzie nie dostać, ponieważ wszystkie są tak nieintuicyjne do Początkujący.

+0

Czy byłeś w stanie go rozwiązać? –

Odpowiedz

0

Wygląda na to, że łączysz różne wersje bibliotek uruchomieniowych w porównaniu do tego, z czym się kompilujesz.

Upewnij się, że zainstalowana jest tylko jedna wersja programu Visual Studio i że znajduje się ona w ścieżce.

Jeśli masz więcej niż jedną wersję, spróbuj tymczasowo zmienić nazwy katalogów głównych innych instalacji programu Visual Studio, aby sprawdzić, czy spowoduje to efekt.

+0

Zainstalowałem ponownie VS, a także SDK (teraz wersja 7.1) (gdzie dostałem plik dla ShObjIdl.h) i otrzymuję następujący błąd: 1> ------ Przebuduj Wszystko rozpoczęte: Projekt: GenericWindowsTesting , Konfiguracja: Debugowanie Win32 ------ 1> C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ Platforms \ Win32 \ Microsoft.Cpp.Win32.Targets (147,5): błąd: brak wymaganego pliku "". ========== Przebuduj wszystko: 0 powiodło się, 1 zakończyło się niepowodzeniem, 0 zostało pominięte ========== – Vertro

0

Chciałbym pobrać pełną próbkę kodu z linku here zamiast kopiować i wklejać ten fragment kodu, z którym się łączyłeś. Mogą być ważne ustawienia kompilatora/linkera w plikach projektu, które nie są tam pokazywane. Próbka jest rozwiązaniem VS 2008, ale udało mi się ją zaktualizować do wersji 2010 i zbudować. Jednakże spowodowało to "fatalny błąd linkera: nie mogłem znaleźć" kernel32.lib ", gdy próbowałem go skompilować w VS 2008.

+0

Wygląda na to, że nie działa inaczej, gdy go pobrałem niż plik Strona. Te same błędy dla mnie. – Vertro

4

Symbole _RTC_xxx są dodawane, gdy używane są" Podstawowe testy uruchomieniowe "; aby je wyłączyć, możesz przejść do właściwości projektu i ustawić opcję Właściwości konfiguracji> C/C++> Wszystkie opcje> Podstawowe ustawienia sprawdzania w czasie pracy na "Domyślne". Chociaż, jak wspomniano w innych odpowiedziach, wygląda na to, że masz niedopasowanie w bibliotekach C-Runtime.

+0

Just sharing: po twojej wskazówce połączyłem małą bibliotekę z moim EXE wygenerowanym z Delphi Tokyo (32/64) i działało jak czar. Dzięki za udostępnienie tego gościa! – silvioprog

Powiązane problemy