AGB  ·  Datenschutz  ·  Impressum  







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

Pointer auf Record

Ein Thema von Gargamel · begonnen am 27. Jul 2007 · letzter Beitrag vom 28. Jul 2007
Antwort Antwort
Seite 2 von 3     12 3      
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#11

Re: Pointer auf Record

  Alt 27. Jul 2007, 15:50
Ich habe es mittlerweile herausgefunden. Auf einem holländischen Forum ...


Trotzdem vielen Dank.

Noch eine kleine Frage zum Schluss: Gibt es eine Möglichkeit, den Namen der verwendeten Grafikkarte zu ermitteln?
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#12

Re: Pointer auf Record

  Alt 27. Jul 2007, 16:02
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
Markus
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: Pointer auf Record

  Alt 28. Jul 2007, 14:54
wenn dir der Name vom Treiber reicht: schau dir das an Damit bekommste u.a. auch den Namen des angeschlossenen Monitors mit raus. (so lange er auch Windows bekannt ist)
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#14

Re: Pointer auf Record

  Alt 28. Jul 2007, 18:42
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
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: Pointer auf Record

  Alt 28. Jul 2007, 19:54
Zitat von Gargamel:
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?
Result := string(Info.DeviceString); 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?

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 Luckie's Artikel
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#16

Re: Pointer auf Record

  Alt 28. Jul 2007, 20:21
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;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#17

Re: Pointer auf Record

  Alt 28. Jul 2007, 21:57
Bedeutet dies nun, dass die Probleme erledigt sind?
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#18

Re: Pointer auf Record

  Alt 28. Jul 2007, 22:05
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.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#19

Re: Pointer auf Record

  Alt 28. Jul 2007, 22:16
Zitat von Gargamel:
Keine Ahnung, wo da der Fehler liegt.
Ich denke, ich schon:

Delphi-Quellcode:
    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;
Dadurch wird der folgende Aufruf wegen EnumDisplayDevices für den Monitor falsch und dadurch kommt es zu weiteren Fehlern. Copy & Paste Fehler halt...
  Mit Zitat antworten Zitat
Gargamel

Registriert seit: 19. Mär 2007
171 Beiträge
 
#20

Re: Pointer auf Record

  Alt 28. Jul 2007, 22:30
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 13:51 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