Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Qt][VC++] WMIC - pobieranie adresów ip kart sieciowych

Ostatnio zmodyfikowano 2014-06-20 23:14
Autor Wiadomość
maniek1310
Temat założony przez niniejszego użytkownika
[Qt][VC++] WMIC - pobieranie adresów ip kart sieciowych
» 2014-06-14 18:09:20
Witam, mam napisaną funkcję, która pobiera dane sprzętowe komputera z bazy WMIC. Problem nastąpił, gdy zwracane elementy (w tym wypadku adresy ip kart sieciowych) są typu string[] (w formie tablicy). I teraz nie wiem jak zrobić aby pobrał wszystkie elementy tej tablicy.

Poniżej kawałek kodu, jakim pobierane są elementy z bazy WMIC :

C/C++
IWbemClassObject * pclsObj;
ULONG uReturn = 0;

while( pEnumerator )
{
    HRESULT hr = pEnumerator->Next( WBEM_INFINITE, 1,
    & pclsObj, & uReturn );
   
    if( 0 == uReturn )
    {
        break;
    }
   
    VARIANT vtProp;
   
    // Get the value of the Name property
   
   
    if( s_type == "string" )
    {
        hr = pclsObj->Get( s_name.c_str(), 0, & vtProp, 0, 0 );
       
        //wcout << s_class.c_str() << "_" << s_name.c_str() << " : " << vtProp.bstrVal << endl;
       
        QString test(( QChar * ) vtProp.bstrVal, wcslen( vtProp.bstrVal ) );
       
        return test;
    } else if( s_type == "uint" )
    {
        hr = pclsObj->Get( s_name.c_str(), 0, & vtProp, 0, 0 );
        //wcout << s_class.c_str() << "_" << s_name.c_str() << " : " << vtProp.uintVal << endl;
       
        uint test2 = vtProp.uintVal;
       
        QString test = QString::number( test2 );
       
        return test;
    }
   
    VariantClear( & vtProp );
   
    pclsObj->Release();
}

A tak wywołuje tą funkcję :
C/C++
deklaracja funkcji: sprawdz( string s_class, const wstring & s_name, string s_type );
lan_ip = sprawdz( "Win32_NetworkAdapterConfiguration", L"IPAddress", "string" );
P-112071
maniek1310
Temat założony przez niniejszego użytkownika
» 2014-06-15 13:15:17
Odświeżam
P-112106
pekfos
» 2014-06-20 23:14:09
http:/​/microsoft.public.vc.language.n​arkive.com​/GGd9TJyu​/how-to-get-a-string-array-from-a-variant
C/C++
hr =::SafeArrayGetElement( V_ARRAY( & vtProp ), & index, & firstIPAddr );

Do tego niepoprawnie używasz VARIANT. Nie możesz przekazać niezainicjalizowanego VARIANTa do VariantClear() i w swoim kodzie nigdy nie wywołujesz tej funkcji, gdy jest potrzebna.
P-112419
« 1 »
  Strona 1 z 1