Fehler beim Auslesen mit WMI



  • Hallo Leute

    Ich bin neu und wollte was proieren und weiss nicht ob ihr nir dabei helfen könntet. Ich habe ein stück Quellcode gefunden zum Auslesen per WMI der Systemdaten, aber ich bekomme leider immer den Fehler :

    [ilink32 Fehler] Error: Nicht auflösbares externes '__stdcall _com_issue_error(long)' referenziert von C:\USERS\ANDROID\DESKTOP\PROGRAMMING\KONSOLE\WIN32\DEBUG\FILE1.OBJ
    

    .
    .
    .

    #define _WIN32_DCOM
    #pragma hdrstop
    #pragma argsused
    
    #include <wchar.h>
    #include <stdio.h>
    #include <vcl.h>
    #include <windows.h>
    #include <iostream>
    using namespace std;
    #include <wbemcli.h>
    #include <comdef.h>
    
    //CREDENTIAL structure
    //http://msdn.microsoft.com/en-us/library/windows/desktop/aa374788%28v=vs.85%29.aspx
    #define CRED_MAX_USERNAME_LENGTH            513
    #define CRED_MAX_CREDENTIAL_BLOB_SIZE       512
    #define CREDUI_MAX_USERNAME_LENGTH CRED_MAX_USERNAME_LENGTH
    #define CREDUI_MAX_PASSWORD_LENGTH (CRED_MAX_CREDENTIAL_BLOB_SIZE / 2)
    
    // Der Vorgang "CIM_Action" ist Teil eines Prozesses zum Erstellen einer
    // Softwarekomponente im nächsten Status oder zum Löschen der Softwarekomponente
    // im aktuellen Status.
    
    #pragma comment(lib, "wbemuuid.lib")
    #pragma comment(lib, "ole32.lib")
    
    IWbemLocator *pLoc;
    IWbemServices *pSvc;
    IWbemClassObject *pclsObj;
    ULONG uReturn = 0;
    VARIANT vt;
    
    void wqlQuery(IWbemServices *pSvc, LPCWSTR pstrName, LPCWSTR pstrWmiclass)
    {
    IEnumWbemClassObject *pEnumerator = NULL;
    pSvc->ExecQuery(_bstr_t(L"WQL"), _bstr_t(L"SELECT ")+_bstr_t(pstrName)+_bstr_t(L" FROM ")+_bstr_t(pstrWmiclass),
    WBEM_FLAG_FORWARD_ONLY|WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
    
    VariantInit(&vt);
    while(WBEM_S_NO_ERROR == pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn))
    {
    pclsObj->Get(pstrName, 0, &vt, NULL, NULL);
    wprintf(L"%s.%s: %s\n", pstrWmiclass, pstrName, (vt.vt==VT_NULL)?L"":vt.bstrVal);
    
    VariantClear(&vt);
    pclsObj->Release();
    }
    
    pEnumerator->Release();
    }
    
    void main()
    {
    CoInitializeEx(0, COINIT_MULTITHREADED);
    CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
    
    IWbemLocator *pLoc = NULL;
    CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLoc);
    IWbemServices *pSvc = NULL;
    pLoc->ConnectServer(_bstr_t(L"root\\cimv2"), NULL, NULL, NULL, NULL, NULL, 0, &pSvc);
    
    wqlQuery(pSvc, L"Caption", L"Win32_OperatingSystem");
    wqlQuery(pSvc, L"Version", L"Win32_OperatingSystem");
    wqlQuery(pSvc, L"Name", L"Win32_Bios");
    wqlQuery(pSvc, L"Version", L"Win32_Bios");
    wqlQuery(pSvc, L"Name", L"Win32_NetworkAdapter");
    wqlQuery(pSvc, L"MACAddress", L"Win32_NetworkAdapter");
    wqlQuery(pSvc, L"Model", L"Win32_DiskDrive");
    wqlQuery(pSvc, L"Size", L"Win32_DiskDrive");
    wqlQuery(pSvc, L"Product", L"Win32_BaseBoard");
    wqlQuery(pSvc, L"Name", L"Win32_VideoController");
    wqlQuery(pSvc, L"BankLabel", L"Win32_PhysicalMemory");
    wqlQuery(pSvc, L"Capacity", L"Win32_PhysicalMemory");
    
    pSvc->Release();
    pLoc->Release();
    CoUninitialize();
    }
    

    Es wäre schön wenn ein paar Profis in der Sache mir helfen könnten

    MFG



  • Linke noch die "comsupp.lib" hinzu.



  • Th69 schrieb:

    Linke noch die "comsupp.lib" hinzu.

    Habe sie mir runter geladen und gelinkt von BCCSDK packages bekomme nun den Fehler

    [ilink32 Fehler] Error: 'C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\11.0\LIB\WIN32\DEBUG\COMSUPP.LIB' enthält einen ungültigen OMF-Record, Typ 0x21 (möglicherweise COFF)
    


  • Oh, ich dachte, diese wäre schon beim BCB (bzw. Rad Studio oder wie auch immer die neue Version jetzt heißt) dabei.
    Du kannst aber mal den Converter coff2omf versuchen.



  • Th69 schrieb:

    Oh, ich dachte, diese wäre schon beim BCB (bzw. Rad Studio oder wie auch immer die neue Version jetzt heißt) dabei.
    Du kannst aber mal den Converter coff2omf versuchen.

    Sorry habe ich alles schon probiert 😞 😞 hat mir auch nee neue erstellt weil ich gelesen hatte das die von microsoft nicht konfirm sind mit bcbc aber leider bleibt der fehler



  • Habe es nun rausbekommen somit geht es auch einfach dies

    # pragma comment(lib, "comsuppw.lib")
    

    gelinkt

    MFG 😃 😃


Anmelden zum Antworten