2012-04-14 14 views
5

Utilizzo di Visual Studio Express 2010 Ho creato un progetto Windows con le opzioni Applicazione Windows e Progetto vuoto. Allora ho provato il following code snippet dalle esercitazioni MSDN Windows:Simboli esterni non risolti __RTC_ * nel tutorial di programmazione 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; 
} 

mi sono i seguenti errori:

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 

cosa sta succedendo qui? Meglio posso dire qualcosa a che fare con wWinMain, ma è copiato direttamente dal sito.

I compilatori sembrano essere molto più difficili per me che imparare a programmare. Ho deciso su Visual C++ dopo aver provato alcuni altri (i blocchi di codice per lo più), ma dal momento che Visual C++ sembra avere il maggior supporto (o almeno la maggioranza degli utenti) ho pensato che fosse meglio che non arrivare mai da nessuna parte dato che sono così poco intuitivi da un principiante.

+0

Sei riuscito a risolverlo? –

risposta

0

Sembra che si stia collegando una diversa versione delle librerie di runtime rispetto a ciò che si sta compilando.

Assicurati di avere una sola versione di Visual Studio installata e in percorso.

Se si dispone di più versioni, provare a rinominare temporaneamente le directory radice di altre installazioni di Visual Studio per verificare se ciò causerà alcun effetto.

+0

Ho reinstallato VS, così come l'SDK (ora versione 7.1) (dove ho ottenuto il file per ShObjIdl.h) e ricevo il seguente errore: 1> ------ Ricostruisci tutto avviato: Progetto: GenericWindowsTesting , Configurazione: Debug Win32 ------ 1> C: \ Programmi (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ Platforms \ Win32 \ Microsoft.Cpp.Win32.Targets (147,5): errore: il file richiesto "" manca. ========== Ricostruisci tutto: 0 riuscito, 1 fallito, 0 saltato ========== – Vertro

0

Scaricarei l'esempio di codice completo dal collegamento here anziché copiare e incollare lo snippet di codice a cui è stato collegato. Potrebbero esserci importanti impostazioni del compilatore/linker nei file di progetto che non vengono mostrati lì. L'esempio è una soluzione VS 2008, ma sono riuscito ad aggiornarlo a una soluzione del 2010 e a costruirla. Tuttavia, mi è stato restituito "errore linker fatale: impossibile trovare 'kernel32.lib' 'quando ho provato a compilarlo in VS 2008.

+0

Non sembra che agisca diversamente quando lo ho scaricato rispetto al file su il sito. Gli stessi errori per me. – Vertro

4

I simboli _RTC_xxx vengono aggiunti quando vengono utilizzati i' Controlli di runtime di base '; per disabilitarli, è possibile andare sulle proprietà del progetto e impostare l'opzione Proprietà di configurazione> C/C++> Tutte le opzioni> Controlli runtime di base su "Predefinito". Anche se, come detto nelle altre risposte, sembra che tu abbia una mancata corrispondenza nelle librerie C-Runtime.

+0

Solo condivisione: dopo il tuo suggerimento ho collegato una piccola libreria nel mio EXE generato da Delphi Tokyo (32/64) e ha funzionato come un fascino. Grazie per averlo condiviso amico! – silvioprog

Problemi correlati