Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Unit Aufspalten (https://www.delphipraxis.net/196196-unit-aufspalten.html)

EWeiss 30. Apr 2018 12:55

Unit Aufspalten
 
Ich möchte meine Unit Aufspalten und zwar geordnet.

Beispiel.
Eine Unit nur für das IAudioEndpointVolume

Delphi-Quellcode:
  IAudioEndpointVolume = interface(IUnknown)
    ['{5CDF2C82-841E-4546-9722-0CF74078229A}']
    function RegisterControlChangeNotify(pNotify: IAudioEndpointVolumeCallback): HRESULT; stdcall;
    function UnregisterControlChangeNotify(pNotify: IAudioEndpointVolumeCallback): HRESULT; stdcall;
    function GetChannelCount(var pnChannelCount: UINT): HRESULT; stdcall;
    function SetMasterVolumeLevel(fLevelDB: Single; pguidEventContext: PGuid): HRESULT; stdcall;
    function SetMasterVolumeLevelScalar(fLevel: Single; pguidEventContext: PGuid): HRESULT; stdcall;
    function GetMasterVolumeLevel(var pfLevelDB: Single): HRESULT; stdcall;
    function GetMasterVolumeLevelScalar(var pfLevel: Single): HRESULT; stdcall;
    function SetChannelVolumeLevel(nChannel: UINT; fLevelDB: Single; pguidEventContext: PGuid): HRESULT; stdcall;
    function SetChannelVolumeLevelScalar(nChannel: UINT; fLevel:Single; pguidEventContext: PGuid): HRESULT; stdcall;
    function GetChannelVolumeLevel(nChannel: UINT; fLevelDB: Single): HRESULT; stdcall;
    function GetChannelVolumeLevelScalar(nChannel: UINT; var fLevel: Single): HRESULT; stdcall;
    function SetMute(bMute: BOOL; pguidEventContext: PGuid): HRESULT; stdcall;
    function GetMute(var pbMute: BOOL): HRESULT; stdcall;
    function GetVolumeStepInfo(var pnStep: UINT; var pnStepCount: UINT): HRESULT; stdcall;
    function VolumeStepUp(pguidEventContext: PGuid): HRESULT; stdcall;
    function VolumeStepDown(pguidEventContext: PGuid): HRESULT; stdcall;
    function QueryHardwareSupport(var pdwHardwareSupportMask: UINT): HRESULT; stdcall;
    function GetVolumeRange(var pflVolumeMindB: Single; var pflVolumeMaxdB: Single;
                            var pflVolumeIncrementdB: Single): HRESULT; stdcall;
  end;
Das Problem dabei ist das aus diesem Interface auf ein anderes verzweigt wird.
IAudioEndpointVolumeCallback

Das bedeutet ich muss dieses Interface ebenfalls in die gleiche Unit Packen was ich aber eigentlich nicht will.
Aber leider gibt es in Delphi 2010 so etwas wie Namespace nicht.

Wie könnte man das trotzdem verwirklichen.

Also so etwas
namespace AudioVolume.Interfaces ?

Es muss nicht exakt das gleiche sein aber eine Abwandlung dafür vielleicht?

gruss

Bernhard Geyer 30. Apr 2018 12:58

AW: Unit Aufspalten
 
Es müsste reichen vor deinem Interface das andere mit

IAudioEndpointVolumeCallback = interface

zu deklarieren (wie bei klassen).

Wobei man das Aufspalten nicht übertreiben sollte.
IAudioEndpointVolumeCallback und IAudioEndpointVolume haben wohl eine sehr hohe Logische beziehung zueinander.
Dann würde ich diese beiden in einer Unit lassen.

EWeiss 30. Apr 2018 13:03

AW: Unit Aufspalten
 
Ok zur zeit steht alles in einer Unit mir ist das nach dem ich öfters mit C++ arbeite alles so unsauber.
Kein Ordnung. Der Überblick fehlt halt.

Hmm..
Bei manchen Dingen findet man den richtigen Bezug kaum noch.

EDIT:
Das wäre für mich geordnet. Als Beispiel halt. ;)

Code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace AudioVolume.Interfaces
{
    [Guid("C02216F6-8C67-4B5B-9D00-D008E73E0064"),
     InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    internal interface IAudioMeterInformation
    {
        [PreserveSig]
        int GetPeakValue(out float pfPeak);
        [PreserveSig]
        int GetMeteringChannelCount(out int pnChannelCount);
        [PreserveSig]
        int GetChannelsPeakValues( int u32ChannelCount,[In]  IntPtr afPeakValues);
        [PreserveSig]
        int QueryHardwareSupport( out int pdwHardwareSupportMask);
    };
}
Und alle anderen Interface hätten dann den Namespace AudioVolume.Interfaces
Ja geht in Delphi nicht aber wäre angenehmer.

EDIT 2
Geht vielleicht so was?
Delphi-Quellcode:
IAudioEndpointVolume = interface(IUnknown, IAudioVolumeInterface);


Nur wie verzweige ich dann auf die anderen Units.
Muss Denken.. :)

gruss

jaenicke 30. Apr 2018 13:20

AW: Unit Aufspalten
 
Zitat:

Zitat von EWeiss (Beitrag 1400948)
Das Problem dabei ist das aus diesem Interface auf ein anderes verzweigt wird.
IAudioEndpointVolumeCallback

Das bedeutet ich muss dieses Interface ebenfalls in die gleiche Unit Packen was ich aber eigentlich nicht will.

Wenn du in der Unit des IAudioEndpointVolume die Unit mit dem IAudioEndpointVolumeCallback in der uses Klausel referenzierst, reicht das doch.

Bei uns wären das z.B. zwei Units:
Common.Interfaces.Hardware.AudioEndpointVolume.pas
Common.Interfaces.Hardware.AudioEndpointVolumeCall back.pas
Und die erste hätte die zweite in der Uses Klausel drin.

EWeiss 30. Apr 2018 13:30

AW: Unit Aufspalten
 
Zitat:

Wenn du in der Unit des IAudioEndpointVolume die Unit mit dem IAudioEndpointVolumeCallback in der uses Klausel referenzierst, reicht das doch.
Nur dann kommt irgendwann wieder der punkt das ich die Unit im Implementations Teil der Unit referenzieren muss.
Ob das dann die bessere Alternative ist.

Da hab ich wieder was angefangen.
Glaube das wird nichts.
Nun ist halt Delphi.

gruss

jaenicke 30. Apr 2018 13:41

AW: Unit Aufspalten
 
Zitat:

Zitat von EWeiss (Beitrag 1400953)
Nur dann kommt irgendwann wieder der punkt das ich die Unit im Implementations Teil der Unit referenzieren muss.
Ob das dann die bessere Alternative ist.

Dann hast du eine zirkuläre Referenz drin. Das sollte natürlich nicht passieren. Solange du nur in eine Richtung referenzierst und eben alles in einzelne Units verpackst, ist das normalerweise gar kein Problem.

Und wenn du wirklich einmal nicht um eine Kreuzreferenz herumkommst, packst du die beteiligten Typen eben wirklich in eine Unit. Eigentlich™ sollte sich das aber fast immer vermeiden lassen.

EWeiss 30. Apr 2018 13:54

AW: Unit Aufspalten
 
Ok ;)

Werde mich mal drangeben mehr als das ganze wieder zu verwerfen kann eh nicht passieren.
Danke.

gruss

EWeiss 30. Apr 2018 16:03

AW: Unit Aufspalten
 
Kann es sein das es schon eine Unit MMDevice im Suchpfad von Delphi gibt?
Die Komponente kompiliert sich und lässt sich ohne Problem Installieren.

Beim Start der Anwendung jedoch motzt der Compiler rum MMDevice.dcu nicht gefunden oder Constants.dcu nicht gefunden.
Sind aber beide vorhanden.


oh.. habe vergessen das Delphi selber nicht rekursive suchen kann.. LOL

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:36 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