AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dll Aufruf übersetzen

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

Registriert seit: 31. Okt 2006
243 Beiträge
 
#1

Dll Aufruf übersetzen

  Alt 23. Mär 2007, 18:23
Hallo

ich habe hier etwas was ich mit Delphi machen will.
Es ist um eine Dll Funktion aufzurufen.

Das hatte ich so umgeformt und das geht.

Delphi-Quellcode:

dpSetDevMonitorAtten(
   int iDeviceNum,
   DWORD dwChannelID,
   int iNewVolume
);


procedure dpSetDevMonitorAtten(iDeviceNum:integer; dwChannelID:Dword; iNewVolume:integer);
stdcall; external 'DELTAPNL.DLL';
Das ist nur um etwas zu Setten aber das hier soll nun einen Wert zurückgeben.

Delphi-Quellcode:

dpGetDevMonitorAtten(
   int iDeviceNum,
   DWORD dwChannelID,
   int *piVolume
);
Ich habe das jetzt so probiert, aber das geht nicht.

Delphi-Quellcode:

function dpGetDevMonitorAtten(iDeviceNum:integer; dwChannelID:Dword; piVolume:Integer):dword;
stdcall; external 'DELTAPNL.DLL';
Hat vermztlich was mit dem *pivolume zu tun ?

MfG
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Dll Aufruf übersetzen

  Alt 23. Mär 2007, 18:31
Delphi-Quellcode:
function dpGetDevMonitorAtten(iDeviceNum:integer; dwChannelID:Dword; var piVolume:Integer): dword;
stdcall; external 'DELTAPNL.DLL';
* ist hier mit var gleichzusetzen. Es koennte auch ein echter Zeiger sein, aber die Funktions- und Parameternamen machen dies unwahrscheinlich.
Sollte wirklich der Rueckgabetyp der C-Funktinoen fehlen (steht vor dem Funktionsnamen), so ist der Rueckgabetyp implizit Integer und nicht DWORD.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Dll Aufruf übersetzen

  Alt 23. Mär 2007, 18:33
Moin ebber,

also ich würde das so übersetzten:

Delphi-Quellcode:
dpSetDevMonitorAtten(int iDeviceNum,DWORD dwChannelID,int iNewVolume);
// wird zu
function dpSetDevMonitorAtten(const iDeviceNum : integer;const dwChannelID : DWORD;const iNewVolume : integer) : integer; stdcall; external ...
// und
dpGetDevMonitorAtten(int iDeviceNum,DWORD dwChannelID,int *piVolume);
// wird zu
dpGetDevMonitorAtten(const iDeviceNum : integer;const dwChannelID : DWORD;const piVolume : PInteger) : DWORD; stdcall; external...
// Alternative
dpGetDevMonitorAtten(const iDeviceNum : integer;const dwChannelID : DWORD;var piVolume : PInteger) : DWORD; stdcall; external...
Du musst dann für piVolume aber auch die Adresse übergeben (@IntegerVariableDieDenWertErhaelt, 1. Variante) oder eben eine Variable (2. Variante)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#4

Re: Dll Aufruf übersetzen

  Alt 23. Mär 2007, 18:50
Das mit dem dword war ein versehen ich hatte da nur rumprobiert.
Const könnte ich auch noch einbauen. Danke.

Aber es geht nicht es kommt immer noch ein Fehler.

Ich habe hier noch eine kleine Beschreibung des pivolume

Delphi-Quellcode:

int * piVolume    

Location in which to store attenuation value obtained ranging in value from MIN_VOLUME=288 through MAX_VOLUME=0 where each of the 288 steps represents -0.5dB attenuation.

Kann mir das mal einer erklären das versteh ich auch ned so ganz ? pls.

MfG
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#5

Re: Dll Aufruf übersetzen

  Alt 23. Mär 2007, 19:01
Kannst du mal lesen was ich geschrieben habe? "var piVolume : Integer" nicht "var piVolume : PInteger".
Die Funktionen sind moeglicherweise cdecl und nicht stdcall.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Dll Aufruf übersetzen

  Alt 23. Mär 2007, 19:04
Moin ebber,

was für ein Fehler kommt denn?

Nach der Deklaration, müsste man es so aufrufen können:

Delphi-Quellcode:
var
  piMyVolume : PInteger;
  iMyVolume : Integer;
  
begin
  // 1. Variante
  dpGetDevMonitorAtten(0,0,@piMyVolume);
  // 2. Variante
  dpGetDevMonitorAtten(0,0,iMyVolume);
end;
ob das so Sinn macht, sei jetzt mal dahingestellt

[EDIT]
iMyVolume muss natürlich ein integer sein
[/EDIT]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#7

Re: Dll Aufruf übersetzen

  Alt 23. Mär 2007, 19:45
Danke. Das Problem hat sich jetzt gelöst.

Falls einer noch nichts zu tun hat. Was ist ein PInteger und was ist der Unterschied bei cdecl?

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Dll Aufruf übersetzen

  Alt 23. Mär 2007, 21:59
Aufrufkonventionen: http://www.michael-puff.de/Developer...entionen.shtml
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Dll Aufruf übersetzen

  Alt 24. Mär 2007, 03:00
Moin Ebber,

Zitat von ebber:
Was ist ein PInteger
Die Adresse einer Speicherstelle, die als Integer-Wert zur behandeln sein soll.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

Re: Dll Aufruf übersetzen

  Alt 24. Mär 2007, 16:07
Oder etwas einfacher formuliert ein Pointer auf einen Integer.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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 05:13 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