C++ ile windows programlama üzerinde çalışıyorum şu kodda tıkandım derleyince hata veriyor. Galiba linker sorunu çünkü 2 3 fazla hata vardı -loleaut32 -lole32 ekledim bu sefer farklı hata çıktı.
Hatalar ise :
C:\Users\ZamanYolcusu\AppData\Local\Temp\ccYdIStZ.o İsimsiz1.cpp
.text$_ZN7_bstr_t6Data_tC1EPKc[_ZN7_bstr_t6Data_tC1EPKc]+0x2f): undefined reference to `_com_util::ConvertStringToBSTR(char const*)'
C:\Users\ZamanYolcusu\AppData\Local\Temp\ccYdIStZ.o İsimsiz1.cpp
.text$_ZN8WMIQuery10InitializeEv[_ZN8WMIQuery10InitializeEv]+0x18): undefined reference to `IID_IWbemLocator'
c:\program files (x86)\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe C:\Users\ZamanYolcusu\AppData\Local\Temp\ccYdIStZ.o: bad reloc address 0x18 in section `.text$_ZN8WMIQuery10InitializeEv[_ZN8WMIQuery10InitializeEv]'
C:\Users\ZamanYolcusu\Desktop\collect2.exe [Error] ld returned 1 exit status
Kod:
#include <tchar.h>
#include <windows.h>
#include <stdio.h>
#include <comdef.h>
#include <wbemcli.h>
#include <iostream>
using namespace std;
class WMIQuery
{
IWbemLocator* m_pLocator = NULL;
IWbemServices* m_pServices = 0;
public:
WMIQuery() :
m_pLocator(NULL),
m_pServices(NULL){}
bool Initialize()
{ // Obtain the initial locator to WMI
HRESULT hr = ::CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LP**** *)&m_pLocator);
BSTR path = SysAllocString(L"root\\CIMV2");
if (FAILED(hr))
{
cerr << "Failed to create IWbemLocator object. Err code = 0x" << hex << hr << endl;
return false;
}
// Connect to WMI through the IWbemLocator::ConnectServer method
// Connect to the root\cimv2 namespace with the current user
hr = m_pLocator->ConnectServer(
path, // Object path of WMI namespace
NULL, // User name. NULL = current user
NULL, // User password. NULL = current
0, // Locale. NULL indicates current
0, // Security flags.
0, // Authority (e.g. Kerberos)
0, // Context object
&m_pServices // pointer to IWbemServices proxy
);
if (FAILED(hr))
{
cerr << "Could not connect. Error code = 0x" << hex << hr << endl;
m_pLocator->Release();
m_pLocator = NULL;
return false;
}
// Set security levels on the proxy
hr = ::CoSetProxyBlanket(
m_pServices, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // client identity
EOAC_NONE // proxy capabilities
);
if (FAILED(hr))
{
cerr << "Could not set proxy blanket. Error code = 0x" << hex << hr << endl;
m_pServices->Release();
m_pServices = NULL;
m_pLocator->Release();
m_pLocator = NULL;
return false;
}
return true;
}
IEnumWbemClassObject* Query(LPCTSTR strquery)
{
IEnumWbemClassObject* pEnumerator = NULL;
HRESULT hr = m_pServices->ExecQuery(
bstr_t("WQL"),
bstr_t(strquery),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hr))
{
cerr << "Query for operating system name failed. Error code = 0x" << hex << hr << endl;
return NULL;
}
return pEnumerator;
}
~WMIQuery()
{
if (m_pServices != NULL)
{
m_pServices->Release();
m_pServices = NULL;
}
if (m_pLocator != NULL)
{
m_pLocator->Release();
m_pLocator = NULL;
}
}
};
int main(){
char str[100] = "\0";
int bufferSize = sizeof(str);
char bilgi1[100] = "\0", bilgi11[100] = "\0", bilgi111[100] = "\0", bilgi2[100] = "\0", bilgi3[100] = "\0", Buffer[256] = "\0";
unsigned long a, b, SerialNum;
DWORD dwBufSize1 = sizeof(bilgi1), dwBufSize2 = sizeof(bilgi2), dwBufSize3 = sizeof(bilgi3), dwType = REG_SZ;
LONG cevap;
HKEY anahtar1 = 0, anahtar2 = 0, anahtar3 = 0;
HRESULT hres;
WMIQuery query;
if (query.Initialize())
{
IEnumWbemClassObject* pEnumerator = query.Query(_T("SELECT * FROM Win32_SystemEnclosure"));
if (pEnumerator != NULL)
{
// Get the data from the query
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if (0 == uReturn)
{
break;
}
VARIANT vtProp;
hr = pclsObj->Get(L"ChassisTypes", 0, &vtProp, 0, 0);
cout << "Chassis: ";
SAFEARRAY* parrValues = NULL;
if (vtProp.vt & VT_ARRAY)
{
if (VT_BYREF & vtProp.vt)
parrValues = *vtProp.pparray;
else
parrValues = vtProp.parray;
}
if (parrValues != NULL)
{
SAFEARRAYBOUND arrayBounds[1];
arrayBounds[0].lLbound = 0;
arrayBounds[0].cElements = 0;
SafeArrayGetLBound(parrValues, 1, &arrayBounds[0].lLbound);
SafeArrayGetUBound(parrValues, 1, (long*)&arrayBounds[0].cElements);
arrayBounds[0].cElements -= arrayBounds[0].lLbound;
arrayBounds[0].cElements += 1;
if (arrayBounds[0].cElements > 0)
{
for (ULONG i = 0; i < arrayBounds[0].cElements; i++)
{
LONG lIndex = (LONG)i;
INT item;
HRESULT hr = ::SafeArrayGetElement(parrValues, &lIndex, &item);
if (SUCCEEDED(hr))
{
LPCTSTR szType = NULL;
switch (item)
{
case 1: szType = _T("Other"); break;
case 2: szType = _T("Unknown"); break;
case 3: szType = _T("Desktop"); break;
case 4: szType = _T("Low Profile Desktop"); break;
case 5: szType = _T("Pizza Box"); break;
case 6: szType = _T("Mini Tower"); break;
case 7: szType = _T("Tower"); break;
case 8: szType = _T("Portable"); break;
case 9: szType = _T("Laptop"); break;
case 10:szType = _T("Notebook"); break;
case 11:szType = _T("Hand Held"); break;
case 12:szType = _T("Docking Station"); break;
case 13:szType = _T("All in One"); break;
case 14:szType = _T("Sub Notebook"); break;
case 15:szType = _T("Space-Saving"); break;
case 16:szType = _T("Lunch Box"); break;
case 17:szType = _T("Main System Chassis"); break;
case 18:szType = _T("Expansion Chassis"); break;
case 19:szType = _T("SubChassis"); break;
case 20:szType = _T("Bus Expansion Chassis"); break;
case 21:szType = _T("Peripheral Chassis"); break;
case 22:szType = _T("Storage Chassis"); break;
case 23:szType = _T("Rack Mount Chassis"); break;
case 24:szType = _T("Sealed-Case PC"); break;
}
cout << szType;
if (i + 1 < arrayBounds[0].cElements)
cout << ", ";
}
}
cout << endl;
}
}
VariantClear(&vtProp);
pclsObj->Release();
}
pEnumerator->Release();
}
}
::CoUninitialize();
}
Hatalar ise :
C:\Users\ZamanYolcusu\AppData\Local\Temp\ccYdIStZ.o İsimsiz1.cpp
C:\Users\ZamanYolcusu\AppData\Local\Temp\ccYdIStZ.o İsimsiz1.cpp
c:\program files (x86)\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe C:\Users\ZamanYolcusu\AppData\Local\Temp\ccYdIStZ.o: bad reloc address 0x18 in section `.text$_ZN8WMIQuery10InitializeEv[_ZN8WMIQuery10InitializeEv]'
C:\Users\ZamanYolcusu\Desktop\collect2.exe [Error] ld returned 1 exit status

