AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi API-Funktionen mit Parametern funktionieren bei mir nicht.
Thema durchsuchen
Ansicht
Themen-Optionen

API-Funktionen mit Parametern funktionieren bei mir nicht.

Ein Thema von Caps · begonnen am 23. Mär 2006 · letzter Beitrag vom 24. Mär 2006
Antwort Antwort
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#1

API-Funktionen mit Parametern funktionieren bei mir nicht.

  Alt 23. Mär 2006, 23:31
Hallo!

Ich habe eine Frage, die mir selbst dämlich vorkommt, aber ich stell' sie trotzdem.
Seit kurzer Zeit möchte ich die Win32-API verwenden. Ich denk: versuchste mal Beep oder Sleep, da kannste nich viel falsch machen.
Ich hab's probiert. Mehrfach. Dynamic Linking, static linking. Nichts. Es funktioniert nicht.
Dann hab ich's mit Funktionen ohne Parameter versucht. Toll. Das ging: z.B. LockWorkStation. Ohne Probleme.
Funktionen MIT Parameter? Fehlanzeige. Selbst auf der Konsole mit rundll32 <dll-Name>, Parameter mit Space, ohne Space, mit Komma, ohne Komma. Nichts.

Ich denke ja... es könnte an MEINER kernel32.dll liegen.
Wie kriege ich das raus? Wo lade ich eine (intakte und virenfreie) Version runter, die W2K nicht gleich durch seine eigene ersetzt?

Vielen Dank im Vorraus schon.

ps Ich habe viele schlaflose Nächte gehabt, weil Sleep nicht funktioniert. (Der musste sein)

Hier mein bescheidener Code:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
  SysUtils, Windows;

function Beep(dwFreq, dwDuration : DWORD): BOOL; external 'kernel32.dll';

begin
 writeln(Beep(50, 100));
 readln;
end.
Der Returnwert von Beep ist übrigens False. Also an den Lautsprechern liegt's nicht .
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#2

Re: API-Funktionen mit Parametern funktionieren bei mir nich

  Alt 23. Mär 2006, 23:40
Versuchs mal mit

stdcall; hinter dem External - kram (oder davor, siehe unter mir )
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3

Re: API-Funktionen mit Parametern funktionieren bei mir nich

  Alt 23. Mär 2006, 23:42
Da fehlt der C-Parameter Hinweis.
Code:
function Beep(dwFreq, dwDuration : DWORD): BOOL; [b][color=#FF0000]stdcall;[/color][/b] external 'kernel32.dll';
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: API-Funktionen mit Parametern funktionieren bei mir nich

  Alt 23. Mär 2006, 23:50
Ich werfe mal ein Stichwort in die Runde: Aufrufkonvention. Deklarier die Funktion mal als stdcall. Die Aufrufkonvtion legt fest, wie mit den Parametern umgegangen werden soll. Also in welcher Reihenfolge sie auf den Stack abgelegt werden und wer den Stack wieder aufräumt, der Caller oder die augerufene Funktion. Da du keine Aufrufkonvention angegeben hast nimmt Delphi register als Aufrufkonvention an, das heißt die Parameter werden, wenn möglich in den Registern der CPU abgelegt, was am effizientesten ist. Windows arbeitet aber mit der Aufrufkonvention stdcall.

Code:
Direktive | Parameterreihenfolge | Bereinigung | Parameterübergabe in Register
register   links nach rechts     Routine      ja
pascal     links nach rechts     Routine      nein
cdecl      rechts nach links     Aufrufer     nein
stdcall    rechts nach links     Routine      nein
safecall   rechts nach links     Routine      nein
Och manno, nur weil ich mir mal richtig Mühe gegeben habe, bin ich letzter geworden. Das Leben ist ungerecht.

PS:
@sakura: Es ist wieder alles gut.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#5

Re: API-Funktionen mit Parametern funktionieren bei mir nich

  Alt 24. Mär 2006, 03:08
Ich danke Euch sehr herzlich!

Es war genau die Parameter-Konvention.
Erstaunlicherweise hatte ich es vorher bereits mit stdcall; probiert, jedoch hatte ich das hinter external 'kernel32.dll'; gesetzt, und der Compiler meinte, die Deklaration würde von der ursprünglichen abweichen. Nun geht's aber. Jetzt kann ich endlich wieder "schlafen" .

Grüße, Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  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 14:11 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