![]() |
Re: Pointer auf Record
Ich habe es mittlerweile herausgefunden. Auf einem holländischen Forum ... :wall:
Trotzdem vielen Dank. Noch eine kleine Frage zum Schluss: Gibt es eine Möglichkeit, den Namen der verwendeten Grafikkarte zu ermitteln? |
Re: Pointer auf Record
Mit Sicherheit, zum Bleistift über WMI. Ich habs zwar noch nie gemacht, aber dort gibt es eine Möglichkeit, alle Geräte aufzulisten, wenn ich mich nicht irre.
mfG Markus |
Re: Pointer auf Record
wenn dir der Name vom Treiber reicht:
![]() |
Re: Pointer auf Record
Hallo
Deinen Code habe ich in einer normalen VCL-Anwendung ausprobiert. Funktioniert einwandfrei. Ich möchte aber den Code in einer DLL nutzen. Der Monitorname wird korrekt übergeben. Allerdings beim Name der Grafikkarte kommt nicht viel. Info.Devicename ist vom Typ array[0..31] of Char Info.Devicestring vom Typ array[0..127] of Char Ich muss ganz normale Strings zurückgeben. Gibt es eine Lösung? Vielen Dank |
Re: Pointer auf Record
Zitat:
Delphi-Quellcode:
Du bist dir aber hoffentlich im klaren, dass dies in einer DLL Funktion wie Lotto spielen ist, da der String nur temporär ist und seine Gültigkeit mit verlassen der Funktion verliert?
Result := string(Info.DeviceString);
Die reine Konvertierung habe ich dir ja aufgezeigt aber deine Stringübergabe von der DLL macht dir wohl eher einen Strich durch die Rechnung. Siehe dazu auch ![]() |
Re: Pointer auf Record
Hallo
Die Stringübergabe aus der DLL heraus funktioniert. Ich habe schon einige Funktionen darin implementiert. Deine Funktion habe ich soweit abgeändert, dass die gefundenen Werte global in einem Record gespeichert werden. Hier ist der Quellcode:
Delphi-Quellcode:
// globale Variablen
rec_displaydevice = record DeviceName:string; DeviceString:string; Monitorname:String; end; var displaydevice:array[1..4] of rec_displaydevice; var numberdisplaydevice:integer; function get_NumberDisplayDevice:integer; Var Cntr : Cardinal; Info : TDisplayDevice; AdapterName : PChar; OldPos : Integer; Const DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = $00000001; DISPLAY_DEVICE_MULTI_DRIVER = $00000002; DISPLAY_DEVICE_PRIMARY_DEVICE = $00000004; DISPLAY_DEVICE_MIRRORING_DRIVER = $00000008; DISPLAY_DEVICE_VGA = $00000010; Begin NumberDisplayDevice:=0; Cntr := 0; Info.cb := SizeOf(Info); While EnumDisplayDevices(Nil, Cntr, Info, 0) Do Begin NumberDisplayDevice:=NumberDisplayDevice+1; displaydevice[NumberDisplayDevice].DeviceName:=Info.DeviceName; displaydevice[NumberDisplayDevice].DeviceName:=Info.DeviceString; AdapterName := StrAlloc(SizeOf(Info.DeviceName)); StrCopy(AdapterName, Info.DeviceName); EnumDisplayDevices(AdapterName, 0, Info, 0); displaydevice[NumberDisplayDevice].Monitorname:=Info.DeviceString; StrDispose(AdapterName); Inc(Cntr); End; result:=NumberDisplayDevice; End; |
Re: Pointer auf Record
Bedeutet dies nun, dass die Probleme erledigt sind?
|
Re: Pointer auf Record
Hallo
Leider nicht. Ich habe einen kleinen Test gemacht und die Werte in eine Textdatei geschrieben. Da lief alles einwandfrei. Alle Werte sind absolut korrekt. Nur ist die String-Übergabe über die DLL fehlerhaft. Andere Funktionen, die ebenfalls Strings übertragen, funktionieren dagegen tadellos. Keine Ahnung, wo da der Fehler liegt. |
Re: Pointer auf Record
Zitat:
Delphi-Quellcode:
Dadurch wird der folgende Aufruf wegen EnumDisplayDevices für den Monitor falsch und dadurch kommt es zu weiteren Fehlern. Copy & Paste Fehler halt...
displaydevice[NumberDisplayDevice].DeviceName:=Info.DeviceName;
displaydevice[NumberDisplayDevice].DeviceName:=Info.DeviceString; // <--- !!! AdapterName := StrAlloc(SizeOf(Info.DeviceName)); StrCopy(AdapterName, Info.DeviceName); EnumDisplayDevices(AdapterName, 0, Info, 0); displaydevice[NumberDisplayDevice].Monitorname:=Info.DeviceString; |
Re: Pointer auf Record
Hallo
Die ersten 8 Zeichen werden dargestellt. Der Rest in "Müll". Es wird angezeigt: \\.\DISPpf Radeon Xpf Plug undpf Hinter jeder der Zeilen sind noch 2 Zeichen in Form eines Rechtecks. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 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