AGB  ·  Datenschutz  ·  Impressum  







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

Unit Aufspalten

Ein Thema von EWeiss · begonnen am 30. Apr 2018 · letzter Beitrag vom 30. Apr 2018
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Unit Aufspalten

  Alt 30. Apr 2018, 12:55
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Unit Aufspalten

  Alt 30. Apr 2018, 12:58
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Unit Aufspalten

  Alt 30. Apr 2018, 13:03
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?
IAudioEndpointVolume = interface(IUnknown, IAudioVolumeInterface);

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

gruss

Geändert von EWeiss (30. Apr 2018 um 13:16 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Unit Aufspalten

  Alt 30. Apr 2018, 13:20
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Unit Aufspalten

  Alt 30. Apr 2018, 13:30
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: Unit Aufspalten

  Alt 30. Apr 2018, 13:41
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Unit Aufspalten

  Alt 30. Apr 2018, 13:54
Ok

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

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Unit Aufspalten

  Alt 30. Apr 2018, 16:03
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

Geändert von EWeiss (30. Apr 2018 um 16:29 Uhr)
  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 18:57 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