AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi PDH_INVALID_ARGUMENT - Wo liegt der Fehler?
Thema durchsuchen
Ansicht
Themen-Optionen

PDH_INVALID_ARGUMENT - Wo liegt der Fehler?

Ein Thema von quendolineDD · begonnen am 19. Mär 2009 · letzter Beitrag vom 21. Mär 2009
Antwort Antwort
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#1

PDH_INVALID_ARGUMENT - Wo liegt der Fehler?

  Alt 19. Mär 2009, 12:02
Hallo DP,

ich ärgere mich hier schon seit 2 Tagen mit dieser WinApi-Funktion herum. Diese möchte ich nutzen, um mir die Prozessorauslastung eines Mehrkerneprozessors anzeigen zu lassen. In C++ mit Visual Studio 2008 läuft das ganze problemlos. Die Funktion nach Delphi portiert und da geht es gar nicht.
Delphi-Quellcode:
type
  PDH_STATUS = Cardinal;

  function PdhEnumObjectItems (
                              szDataSource : LPCTSTR;
                              szMachineName : LPCTSTR;
                              szObjectName : LPCTSTR;
                              mszCounterList : LPTSTR;
                              pcchCounterListLength : LPDWORD;
                              mszInstanceList : LPTSTR;
                              pcchInstanceListLength : LPDWORD;
                              dwDetailLevel,
                              dwFlags : DWORD) : PDH_STATUS;
  external 'Pdh.dllname 'PdhEnumObjectItemsA';

[...]

procedure TForm1.Button1Click(Sender: TObject);
Const PERF_DETAIL_WIZARD = 400;
function StringToChar (const Str : String; var Chr : PChar) : Integer;
begin
  for Result := 0 to Length(Str) do
    GetMem (Chr, Result +1);

  StrPCopy(Chr, Str);
end;
var
  erg : PDH_STATUS;
  szCounterList : LPTSTR;
  dwCounterListLength : DWORD;
  szInstanceList : LPTSTR;
  dwInstanceListLength : DWORD;
  szObjectItem : LPTSTR;
  lpMsgBuf : LPTSTR;
begin
szCounterList := nil;
dwCounterListLength := 0;
szInstanceList := nil;
dwInstanceListLength := 0;
StringToChar('Processor', szObjectItem);
  erg := PdhEnumObjectItems (
          nil,
          nil,
          szObjectItem,
          szCounterList,
          @dwCounterListLength,
          szInstanceList,
          @dwInstanceListLength,
          PERF_DETAIL_WIZARD,
          0);
Result-Value der Funktion ist jedoch nicht wie erwartet PDH_MORE_DATA sondern PDH_INVALID_ARGUMENT.
MSDN schreibt dazu
Zitat:
A parameter is not valid. For example, on some releases you could receive this error if the specified size on input is greater than zero but less than the required size.
Jedoch initialisiere ich alles auf 0 und nil, um erstmal die erwartet Größe zurückzubekommen.

Vielleicht findet jemand des Rätsels Lösung?
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: PDH_INVALID_ARGUMENT - Wo liegt der Fehler?

  Alt 20. Mär 2009, 13:49
*push*
Niemand, der mein Problem nachvollziehen kann?
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#3

Re: PDH_INVALID_ARGUMENT - Wo liegt der Fehler?

  Alt 21. Mär 2009, 03:13
stdcall vergessen?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: PDH_INVALID_ARGUMENT - Wo liegt der Fehler?

  Alt 21. Mär 2009, 05:15
So ist es, stdcall fehlt und damit sind die Parameter natürlich falsch.

Die Frage ist aber warum du dir überhaupt selbst die Mühe mit der Übersetzung machst. In den JEDI API Übersetzungen ist die Funktion bereits enthalten:
http://jedi-apilib.sourceforge.net/
(Entsprechend der angegebenen Headerdatei Pdh.h in der entsprechenden Datei JwaPdh.pas.)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#5

Re: PDH_INVALID_ARGUMENT - Wo liegt der Fehler?

  Alt 21. Mär 2009, 13:08
Verständnis erlangen will er
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: PDH_INVALID_ARGUMENT - Wo liegt der Fehler?

  Alt 21. Mär 2009, 17:33
Zitat von Dezipaitor:
Verständnis erlangen will er
Richtig, nur wie banal manche Fehler sind ...
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz