AGB  ·  Datenschutz  ·  Impressum  







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

DLL - Probs mit Strings

Ein Thema von TERWI · begonnen am 3. Okt 2011 · letzter Beitrag vom 3. Okt 2011
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.502 Beiträge
 
Delphi 12 Athens
 
#1

AW: DLL - Probs mit Strings

  Alt 3. Okt 2011, 12:50
0..389 = 390, da du wohl immernoch das -1 vergessen hast.
Das wären 1,5*MSDN-Library durchsuchenMAX_PATH, aber wie schon erwähnt, sollte man an vorgegebenen Konstanten nicht rumspielen.

Delphi-Quellcode:
var
  S: TFileStream;
  N: FilterNames;

S := TFileStream.Create('dateiname', fmCreate);

FillChar(N, SizeOf(N), 0);
bdaapiGetDevNameAndFEType(hOpen, N);
S.WriteBuffer(N, SizeOf(N));

FillChar(N, SizeOf(N), 255);
bdaapiGetDevNameAndFEType(hOpen, N);
S.WriteBuffer(N, SizeOf(N));

S.Free;
Und wenn man sich mit garnicht ssicher ist, dann doch eher wie Folgt.
Delphi-Quellcode:
function bdaapiGetDevNameAndFEType(hOpen: THandle; P: Pointer): HRESULT; stdcall;

var
  S: TFileStream;
  B: array[0..8191] of Byte; // 8 KB sollten groß genug sein (selbst 2 KB dürften, laut Spezifikation, ausreichen)

S := TFileStream.Create('dateiname', fmCreate);

FillChar(B, SizeOf(B), 0);
bdaapiGetDevNameAndFEType(hOpen, @B);
S.WriteBuffer(B, SizeOf(B));

FillChar(B, SizeOf(B), 255);
bdaapiGetDevNameAndFEType(hOpen, @B);
S.WriteBuffer(B, SizeOf(B));

S.Free;
Und die Datei hier anhängen.

Ginge natürlich auch einfacher, wenn man die Möglichkeiten des Debuggers nutzen und sich die Variable direkt im Speicher ansieht.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Okt 2011 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: DLL - Probs mit Strings

  Alt 3. Okt 2011, 13:16
Ich habs einfach mal so gemacht:
Code:
S.WriteBuffer(Dev.FilterNames, SizeOf(Dev.FilterNames));
Man sieht die Strings in der Datei - Es sind 2 Geräte die gelistet werden.
Hab mir das aber nur mit dem Editor angesehen.
'Dateiname1.txt' ist für die DLL .11, 'Dateiname2.txt' für die .21

Für den Debugger bin ich A) 'zu blöd' und B) habe ich den beim proggen mit DirectShow Dingen eh immer aus.
Angehängte Dateien
Dateityp: txt dateiname1.txt (3,1 KB, 8x aufgerufen)
Dateityp: txt dateiname2.txt (5,3 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: DLL - Probs mit Strings

  Alt 3. Okt 2011, 13:53
Hab mir die Dateien nun mal mit den PS-PAD im Hexeditor angesehen.

Mit den Daten aus der DLL-.11 erkenne ich folgendes:
String_1 hat 520 - 1 Byte (Tuner-Name)
String_2 hat 520 - 1 Byte (Capturer-Name)
String_3 hat 260 - 1 Byte (leer)
String_4 hat 260 - 1 Byte (Geräte-Name)
FE-Type ist ein Byte (passt auch zum Gerät)

Mit den Daten aus der DLL-.21 erkenne scheint das ähnlich.
Allerdings sehe ich da nirgendwo am Ende des Records eine Zahl für den FE-Type ....

Schon eom wenig eigenartig, das hier MAX_PATH mal mit 520 und dann mit 260 Zeichen verwendet wird.
Als Ansi-String kann ich das nicht wirklich erkennen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.502 Beiträge
 
Delphi 12 Athens
 
#4

AW: DLL - Probs mit Strings

  Alt 3. Okt 2011, 13:58
Datei 1 ist so aufgebaut:
Code:
0000   'TechnoTrend BDA/DVB-S Tuner'#0
0104   #0
0208   'TechnoTrend BDA/DVB Capture'#0
030C  #0
0410   #0
0514   'TT-budget S2-3200'#0
0618   3


Offset 061A:
0000   'USB 2.0 BDA DVB-S Tuner'#0
0104   #0
0208   'USB 2.0 BDA DVB Capture'#0
030C  #0
0410   #0
0514   'TT-connect S-2400'#0
0618   2
Wenn ich Nachzähle, dann komm ich auf 6 Strings á 260 (MAX_PATH) AnsiChars und ein nachfolgendes WORD.
Die alte Version hat also einen String weniger.

Datei 2:
Code:
0000   'TechnoTrend BDA/DVB-S Tuner'#0
0104   #0
0208   'TechnoTrend BDA/DVB Capture'#0
030C  #0
0410   #0
0514   #0
0618   'TT-budget S2-3200'#0
071C  3

Offset 0AAC:
0000   'USB 2.0 BDA DVB-S Tuner'#0
0104   #0
0208   'USB 2.0 BDA DVB Capture'#0
030C  #0
0410   #0
0514   #0
0618   'TT-connect S-2400'#0
071C  2
Hier sind es 7 Strings á 260 (MAX_PATH) AnsiChars und das nachfolgende WORD.
Was genau deiner Deklaration entspricht.

Die 260 Stimmen also. (bzw. Meiner aus )


Zitat:
Schon eom wenig eigenartig, das hier MAX_PATH mal mit 520 und dann mit 260 Zeichen verwendet wird.
520 = 2 * 260 = 2 Strings und der Zweite ist leer

ANSI ist auch korrekt, denn bei Unicode würde jeweils eine #0 zwischen jedem einzelnen Buchstaben liegen und ein String wäre MAX_PATH * SizeOf(WideChar) = 520 Byte groß.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Okt 2011 um 14:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: DLL - Probs mit Strings

  Alt 3. Okt 2011, 14:08
Tja, manschmal brauchts halt eben den Wink mit dem Baumstamm.....

Das mit den 389 war wohl eher ein Zufall, dass da was bei der .11 herauskam.

... und wenn man dann auch noch [0..MAX_PATH-1] zur Array-Deklaration schreibt, klappts auch mit der Ausgabe.

Wei oh wei oh wei ...

Danke dir für die Erleuchtung !
  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 22:23 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