![]() |
ich brauche hilfe mit Record’s
Hi, ich brauche hilfe mit Record’s. genauer gesagt, ich versuche eine liste aus eine dll zu exportieren
allerding wird einer der eintrage nicht richtig angezeig,
Delphi-Quellcode:
das ist der dll part
type
TDeviceInfo = record DeviceName : PWideChar; DeviceID : PInteger; end; PDeviceInfo = Array of TDeviceInfo;
Delphi-Quellcode:
function TPlayer.Get_Device_Name(var DeviceInfo : PDeviceInfo; Driver : TDriver_Type): Boolean;
var WAS_Info : BASS_WASAPI_DEVICEINFO; DS_Info : BASS_DEVICEINFO; Device, DefDevice : Integer; begin case Driver of Driver_DirectSound: begin try SetLength(DeviceInfo, 1); Device:= 0; while (BASS_GetDeviceInfo(Device, DS_Info) <> false) do begin DeviceInfo[Device].DeviceName:= PWideChar(Widestring(DS_Info.name)); Inc(Device); end; Result:= true; except Result:= false; end; end; Driver_WASAPI: begin // ToDo end; Driver_ASIO: begin // ToDo end; end; //case end; end; function Player_Get_Device_Name(Obj : Pointer; var DeviceInfo : PDeviceInfo; DriverType : TDriver_Type) : Boolean; export; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; begin try Result:= TPlayer(Obj).Get_Device_Name(DeviceInfo, DriverType); except Result:= false; end; end; exports ... Player_Get_Device_Name ... hier benutze ich Record's und (dll)
Code:
Here I use a TStringlist which gives me back the correct result
No sound
Digital Audio (S/PDIF) (ASUS XONAR PHOEBUS Audio Device) << falsch Speakers (ASUS XONAR PHOEBUS Audio Device) Digital Audio (S/PDIF) (ASUS XONAR PHOEBUS Audio Device)
Code:
No sound
Headset(SB Tactic(3D) Wrath Wireless) << Richtig Speakers (ASUS XONAR PHOEBUS Audio Device) Digital Audio (S/PDIF) (ASUS XONAR PHOEBUS Audio Device) and in this way I retrieve the data
Delphi-Quellcode:
var Obj1 : Pointer; ... var List : TStrings; Rec : PDeviceInfo; i : integer; begin if Load_PlayerDll(PlayerDLL) then begin Obj1:= Player_Create(Application.Handle, ''); Player_Set_Driver(Obj1, Driver_DirectSound); Player_Init_Device(Obj1, -1, 44100, false); list := TStringlist.Create; Player_Get_Device_Name(Obj1, Rec, Driver_DirectSound); for I := 0 to SizeOf(Rec) do begin List.Add(PWideChar(Rec[i].DeviceName)); end; Devicelist.Items.Assign(List); list.Free; end; vielleicht habt ihr ja eine bessere idee wie man das lösen könnte |
AW: ich brauche hilfe mit Record’s
Warum verwendest Du Pointer statt String und Integer in Deinem Record?
|
AW: ich brauche hilfe mit Record’s
PWideChar und PInteger im Record geht sowieso nicht, da sonst alle Zeiger auf den selben temporären Buffer in der DLL verweisen, der eventuell schon nicht mehr gültig ist.
Ist sichergestellt das DLL und Anwendung den selben Speichermanager verwenden? Sonst gibts später noch Probleme mit dem SetLength und der Freigabe des Arrays.
Delphi-Quellcode:
TDeviceInfo = record
DeviceName : WideString; DeviceID : Integer; end; {...} SetLength(DeviceInfo, 0); Device:= 0; case Driver of {...} while {...} do begin {Länge des Arrays erhöhen} SetLength(DeviceInfo, Device + 1); DeviceInfo[Device] {...}; Inc(Device); end; |
AW: ich brauche hilfe mit Record’s
Hi, Danke für die antwort!
Zitat:
und habe ausversehen das falsche kopiert. dass stammte von vorherigen versuch, wo ich kein array's benutzt hatte. das bringt mich auch zu nächsten frage. wie effizient ist das ganze? dass soll ja auch C++ kompatible sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 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