![]() |
Dll Aufruf übersetzen
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:
Das ist nur um etwas zu Setten aber das hier soll nun einen Wert zurückgeben.dpSetDevMonitorAtten( int iDeviceNum, DWORD dwChannelID, int iNewVolume ); procedure dpSetDevMonitorAtten(iDeviceNum:integer; dwChannelID:Dword; iNewVolume:integer); stdcall; external 'DELTAPNL.DLL';
Delphi-Quellcode:
Ich habe das jetzt so probiert, aber das geht nicht.dpGetDevMonitorAtten( int iDeviceNum, DWORD dwChannelID, int *piVolume );
Delphi-Quellcode:
Hat vermztlich was mit dem *pivolume zu tun ?function dpGetDevMonitorAtten(iDeviceNum:integer; dwChannelID:Dword; piVolume:Integer):dword; stdcall; external 'DELTAPNL.DLL'; MfG |
Re: Dll Aufruf übersetzen
Delphi-Quellcode:
* ist hier mit var gleichzusetzen. Es koennte auch ein echter Zeiger sein, aber die Funktions- und Parameternamen machen dies unwahrscheinlich.
function dpGetDevMonitorAtten(iDeviceNum:integer; dwChannelID:Dword; var piVolume:Integer): dword;
stdcall; external 'DELTAPNL.DLL'; Sollte wirklich der Rueckgabetyp der C-Funktinoen fehlen (steht vor dem Funktionsnamen), so ist der Rueckgabetyp implizit Integer und nicht DWORD. |
Re: Dll Aufruf übersetzen
Moin ebber,
also ich würde das so übersetzten:
Delphi-Quellcode:
Du musst dann für piVolume aber auch die Adresse übergeben (@IntegerVariableDieDenWertErhaelt, 1. Variante) oder eben eine Variable (2. Variante)
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... |
Re: Dll Aufruf übersetzen
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 |
Re: Dll Aufruf übersetzen
Kannst du mal lesen was ich geschrieben habe? "var piVolume : Integer" nicht "var piVolume : PInteger".
Die Funktionen sind moeglicherweise cdecl und nicht stdcall. |
Re: Dll Aufruf übersetzen
Moin ebber,
was für ein Fehler kommt denn? Nach der Deklaration, müsste man es so aufrufen können:
Delphi-Quellcode:
ob das so Sinn macht, sei jetzt mal dahingestellt ;-)
var
piMyVolume : PInteger; iMyVolume : Integer; begin // 1. Variante dpGetDevMonitorAtten(0,0,@piMyVolume); // 2. Variante dpGetDevMonitorAtten(0,0,iMyVolume); end; [EDIT] iMyVolume muss natürlich ein integer sein :wall: [/EDIT] |
Re: Dll Aufruf übersetzen
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 |
Re: Dll Aufruf übersetzen
Aufrufkonventionen:
![]() |
Re: Dll Aufruf übersetzen
Moin Ebber,
Zitat:
|
Re: Dll Aufruf übersetzen
Oder etwas einfacher formuliert ein Pointer auf einen Integer.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz