wbemuuid.lib linken



  • Hallo,

    ich benutze Visual Studio .NET 2003. Wie komme ich dort an die wbemuuid.lib und wie kann ich die dort mit meinem Programm (eine cpp-Datei) linken und kompilieren?

    Bin leider absoluter Neueinsteiger in VS...

    Vielen Dank.



  • #pragma comment(lib, "wbemuuid.lib")
    

    ??



  • Mhh, nicht schlecht, danke. Aber wo liegt noch das Problem an dem Code?

    - fatal error LNK1120: 1 unaufgelöste externe Verweise
    - error LNK2019: Nicht aufgelöstes externes Symbol '_main', verwiesen in Funktion '_mainCRTStartup'

    #pragma comment(lib, "wbemuuid.lib")
    #include <windows.h>
    #include <tchar.h>
    #include <wbemdisp.h>
    
    VOID ProcessorId(ISWbemObject* pObject)
    {
        ISWbemPropertySet* pPropSet = NULL;
    
        if(SUCCEEDED(pObject->get_Properties_(&pPropSet)))
        {
            ISWbemProperty* pProp = NULL;
            BSTR bstrName = SysAllocString(L"ProcessorId");
    
            if(SUCCEEDED(pPropSet->Item(bstrName, 0, &pProp)))
            {
                VARIANT varValue;
                VariantInit(&varValue);
    
                if(SUCCEEDED(pProp->get_Value(&varValue)))
                {
                    if(SUCCEEDED(VariantChangeType(&varValue, &varValue, 0, VT_BSTR)))
                    {
                        MessageBoxW(NULL, V_BSTR(&varValue), L"ProcessorId", MB_OK);
                    }
                }
    
                VariantClear(&varValue);
                pProp->Release();
            }
    
            SysFreeString(bstrName);
            pPropSet->Release();
        }
    
        return;
    }
    
    int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
      ISWbemObjectSet* pObjectSet = NULL;
      ISWbemServices*  pServices  = NULL;
      ISWbemObject*    pObject    = NULL;
      IEnumVARIANT*    pEnumObj   = NULL;
      IUnknown*        pUnk       = NULL;
      VARIANT          varItem;
      HRESULT          hr;
      BSTR             bstrClass, bstrName;
    
        CoInitialize(NULL);
    
        if(SUCCEEDED(CoGetObject(OLESTR("winmgmts:"), NULL, IID_ISWbemServices, (void**)&pServices)))
        {
            bstrClass = SysAllocString(OLESTR("Win32_Processor"));
    
            if(SUCCEEDED(pServices->InstancesOf(bstrClass, 0, NULL, &pObjectSet)))
            {
                if(SUCCEEDED(pObjectSet->get__NewEnum(&pUnk)))
                {
                    if(SUCCEEDED(pUnk->QueryInterface(IID_IEnumVARIANT, (void**)&pEnumObj)))
                    {
                        while(S_OK == pEnumObj->Next(1, &varItem, NULL))
                        {
                            if(FAILED(VariantChangeType(&varItem, &varItem, 0, VT_UNKNOWN)))
                            {
                                VariantClear(&varItem);
                                continue;
                            }
    
                            pObject = NULL;                        
                            hr = V_UNKNOWN(&varItem)->QueryInterface(IID_ISWbemObject, (void**)&pObject);
                            VariantClear(&varItem);
    
                            ProcessorId(pObject);
    
                            if(FAILED(hr))
                                continue;
    
                            bstrName = NULL;
                            pObject->GetObjectText_(0, &bstrName);
    
                            MessageBoxW(NULL, bstrName, L"Processor Info", MB_OK);
    
                            SysFreeString(bstrName);
                            pObject->Release();
                        }
                        pEnumObj->Release();
                    }
                    pUnk->Release();
                }
                pObjectSet->Release();
            }
            SysFreeString(bstrClass);
            pServices->Release();
        }
    
        CoUninitialize();
        return(0);
    }
    


  • Dann hast du wohl Konsolenanwendung im Projekt-Assistenten ausgewählt.



  • Eine absolute IFAQ...

    (Insanely frequently asked question)



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ja ich habe eine Konsolenanwendung gewählt. Schließlich reicht mir ja auch eine einfach Ausgabe. Was muss ich denn sonst wählen? Ohne das ich gleich eine grafische Oberfläche dazu bekomme?
    Danke für eure bisherige und kommende Hilfe.

    @Ringding: Für dich mag es lächerlich sein, aber ich habe bislang nur unter Linux c++ programmiert. Diese Windows-Sachen sind ganz neu für mich. Daher ist es so banal nun auch nicht.



  • wenn du ne konsolenanwendung willst dann musst du

    int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

    in

    int main()

    ändern



  • DANKE!!!! 👍



  • Doch noch ein Frage. Warum werden einige Werte nicht mit angezeigt?

    Gerade interessante Werte wie z.B. uint64 MaxSpeed; oder uint64 Speed; aus der Win32_NetworkAdapter werden nicht mit ausgegeben. Hat das einen besonderen Grund oder sind die Werte nicht verfügbar?



  • und wenn man nun konsolenanwendung ausgewählt hat und doch ein grafisches fenster will?

    ich meine, diese ganze assistenten unterstützung ist mir z.zt extrem unsympatisch, ich will sowas immer einmal von hand machen und alles verstehn...

    es muss doch möglich sein das zu programmieren und nicht irgendeine magische VS option zu benutzen... ?



  • Es hindert dich ja keiner daran, trotzdem Fenster zu erzeugen.

    Die magische VS-Option schaltet aber ein magisches Flag im .EXE um, das von Windows entsprechend interpretiert wird. Also nix mit selber programmieren.


Anmelden zum Antworten