?
Hallo,
ich habe eine Anwendung mit Dev-CPP entwickelt welche das Microsoft Platform SDK benutzt. (Im speziellen die Performance Counter)
Diese Anwendung möchte ich nun von Grund auf neu schreiben und habe beschlossen wxWidgets & Code::Blocks zur Entwicklung zu nehmen. Leider versagt Code::Blocks schon beim folgenden Minimalprogramm...
Kann mir jemand auf die Sprünge helfen wie ich das SDK von Code::Blocks aus nutzen kann? Die Pfadangaben zum Include und den Lib-Verzeichnissen wurden alle eingefügt. Allerdings bringt Code::Blocks immer "#error Must define a target architecture" Auch das ausdokumentierte Macro half nix.
Gibt es irgendwelche gravierenden Unterschiede zwischen den MinGW-Versionen bei Dev-CPP/Code::Blocks?
//#define _M_IX86
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <tchar.h>
#include <pdh.h>
#include <pdhmsg.h>
#define SAMPLE_INTERVAL_MS 1000
int main(int argc, TCHAR **argv)
{
HQUERY hQuery;
HCOUNTER hCounter;
PDH_STATUS pdhStatus;
PDH_FMT_COUNTERVALUE fmtValue;
DWORD ctrType;
SYSTEMTIME stSampleTime;
PDH_BROWSE_DLG_CONFIG BrowseDlgData;
TCHAR szPathBuffer[PDH_MAX_COUNTER_PATH];
// Create a query.
pdhStatus = PdhOpenQuery(NULL, NULL, &hQuery);
if (ERROR_SUCCESS != pdhStatus)
{
_tprintf(TEXT("PdhOpenQuery failed with %ld.\n"), pdhStatus);
goto cleanup;
}
ZeroMemory(&szPathBuffer, sizeof(szPathBuffer));
// Initialize the browser dialog window settings.
ZeroMemory(&BrowseDlgData, sizeof(PDH_BROWSE_DLG_CONFIG));
BrowseDlgData.bIncludeInstanceIndex = FALSE;
BrowseDlgData.bSingleCounterPerAdd = TRUE;
BrowseDlgData.bSingleCounterPerDialog = TRUE;
BrowseDlgData.bLocalCountersOnly = FALSE;
BrowseDlgData.bWildCardInstances = TRUE;
BrowseDlgData.bHideDetailBox = TRUE;
BrowseDlgData.bInitializePath = FALSE;
BrowseDlgData.bDisableMachineSelection = FALSE;
BrowseDlgData.bIncludeCostlyObjects = FALSE;
BrowseDlgData.bShowObjectBrowser = FALSE;
BrowseDlgData.hWndOwner = NULL;
BrowseDlgData.szReturnPathBuffer = szPathBuffer;
BrowseDlgData.cchReturnPathLength = PDH_MAX_COUNTER_PATH;
BrowseDlgData.pCallBack = NULL;
BrowseDlgData.dwCallBackArg = 0;
BrowseDlgData.CallBackStatus = ERROR_SUCCESS;
BrowseDlgData.dwDefaultDetailLevel = PERF_DETAIL_WIZARD;
BrowseDlgData.szDialogBoxCaption = TEXT("Select a counter to monitor.");
// Display the counter browser window. The dialog is configured
// to return a single selection from the counter list.
pdhStatus = PdhBrowseCounters (&BrowseDlgData);
if (ERROR_SUCCESS != pdhStatus)
{
if (PDH_DIALOG_CANCELLED != pdhStatus)
{
_tprintf(TEXT("PdhBrowseCounters failed with 0x%x.\n"), pdhStatus);
}
goto cleanup;
}
// Add the selected counter to the query.
pdhStatus = PdhAddCounter (hQuery,
szPathBuffer,
0,
&hCounter);
if (ERROR_SUCCESS != pdhStatus)
{
_tprintf(TEXT("PdhBrowseCounters failed with 0x%x.\n"), pdhStatus);
goto cleanup;
}
// Most counters require two sample values to display a formatted value.
// PDH stores the current sample value and the previously collected
// sample value. This call retrieves the first value that will be used
// by PdhGetFormattedCounterValue in the first iteration of the loop
// Note that this value is lost if the counter does not require two
// values to compute a displayable value.
pdhStatus = PdhCollectQueryData (hQuery);
if (ERROR_SUCCESS != pdhStatus)
{
_tprintf(TEXT("PdhCollectQueryData failed with 0x%x.\n"), pdhStatus);
goto cleanup;
}
// Print counter values until a key is pressed.
while (!_kbhit()) {
// Wait one interval.
Sleep(SAMPLE_INTERVAL_MS);
// Get the sample time.
GetLocalTime (&stSampleTime);
// Get the current data value.
pdhStatus = PdhCollectQueryData (hQuery);
// Print the time stamp for the sample.
_tprintf (
TEXT("\n\"%2.2d/%2.2d/%4.4d %2.2d:%2.2d:%2.2d.%3.3d\""),
stSampleTime.wMonth,
stSampleTime.wDay,
stSampleTime.wYear,
stSampleTime.wHour,
stSampleTime.wMinute,
stSampleTime.wSecond,
stSampleTime.wMilliseconds);
// Compute a displayable value for the counter.
pdhStatus = PdhGetFormattedCounterValue (hCounter,
PDH_FMT_DOUBLE,
&ctrType,
&fmtValue);
if (pdhStatus == ERROR_SUCCESS)
{
_tprintf (TEXT(",\"%.20g\""), fmtValue.doubleValue);
}
else
{
_tprintf(TEXT("\nPdhGetFormattedCounterValue failed with 0x%x.\n"), pdhStatus);
goto cleanup;
}
}
cleanup:
// Close the query.
if (hQuery)
PdhCloseQuery (hQuery);
return pdhStatus;
}