Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Probleme mit TStrings.IndexOfName unter Vista (https://www.delphipraxis.net/89457-probleme-mit-tstrings-indexofname-unter-vista.html)

sh17 2. Apr 2007 14:59

Re: Probleme mit TStrings.IndexOfName unter Vista
 
Zitat:

Zitat von sh17
Vielleicht langt es ja schon, wie bei TNTs InstallTntSystemUpdates die Delphi-Functionen zu patchen.

Hab es getestet, geht super.

Damit wäre ja der erste TNT-Fork da ;-)

Bernhard Geyer 2. Apr 2007 15:09

Re: Probleme mit TStrings.IndexOfName unter Vista
 
Zitat:

Zitat von sh17
Zitat:

Zitat von sh17
Vielleicht langt es ja schon, wie bei TNTs InstallTntSystemUpdates die Delphi-Functionen zu patchen.

Hab es getestet, geht super.

Damit wäre ja der erste TNT-Fork da ;-)

Bringt aber nichts wenn eine verwendete DLL genau in dieses Problem läuft. BeiTNT werden ja "nur" die Einsprünge im Delphi-Code umgebogen aber nicht auf eigene Programmebene für alle DLL's

sh17 2. Apr 2007 15:16

Re: Probleme mit TStrings.IndexOfName unter Vista
 
wir nutzen keine DLL's, von daher...

Bernhard Geyer 2. Apr 2007 15:38

Re: Probleme mit TStrings.IndexOfName unter Vista
 
Zitat:

Zitat von sh17
wir nutzen keine DLL's, von daher...

Ist wohl eine Linux-Programm :-)

Der Fehler das Problem kann ja durch unerwartete Daten auf API-Ebene schon auftreten. Und irgendwelche (System-)DLL's läd auch ein Hello-World-Programm.

sh17 2. Apr 2007 19:27

Re: Probleme mit TStrings.IndexOfName unter Vista
 
Also heisst das was? API-Hook?

Bernhard Geyer 3. Apr 2007 08:17

Re: Probleme mit TStrings.IndexOfName unter Vista
 
Zitat:

Zitat von sh17
Also heisst das was? API-Hook?

Falls es eine DLL betrifft von dessen Hersteller/Entwickler man keine Vista-Angepaßte Version bekommt: Ja, leider.

sh17 3. Apr 2007 08:49

Re: Probleme mit TStrings.IndexOfName unter Vista
 
Ja sicher, die Funktion CompareString in kernel32.dll. Ob mir da MS einen Patch macht? :gruebel:

Ansonsten nutzen wir zwangsweise nur System-Dlls.

Eigentlich müsste es ja ausreichen, den Einsprungscode in Delphi umzubiegen. Ich möchte ja nur, das WideSameText und WideSameStr (TStringList) wieder richtig arbeiten. Was ein CompareString-Aufruf in irgend einer gelinkten dll zurück bekommt, ist mir eigentlich relativ Schnitte. Betrifft schlimmstenfalls irgend eine GUI-Komponente, aber das ist zu verkraften.

marabu 3. Apr 2007 08:56

Re: Probleme mit TStrings.IndexOfName unter Vista
 
Hallo,

den eigentlichen "Fehler" haben leider die VCL-Macher verbrochen. Sie hätten, auch nach dem seinerzeit aktuellen PSDK, einen eigenen Aufruf von CompareString() mit LOCALE_INVARIANT verwenden müssen, anstatt auf ihre lokalisierte Funktion AnsiSameText() zurückzugreifen. Das Thema gehört jetzt wohl nach Delphi-Bugs ...

Grüße vom marabu

sh17 3. Apr 2007 09:02

Re: Probleme mit TStrings.IndexOfName unter Vista
 
Hast Du mal eben den Wert von LOCALE_INVARIANT bei der Hand? Bin grad unter XP und hab da das SDK nicht drauf.

Wieso muss ich immer der Erste sein, bei dem so was passiert.

sh17 3. Apr 2007 10:06

Re: Probleme mit TStrings.IndexOfName unter Vista
 
Zitat:

Zitat von sh17
Hast Du mal eben den Wert von LOCALE_INVARIANT bei der Hand? Bin grad unter XP und hab da das SDK nicht drauf.

:wall:

is ja gar keine Konstante. wird mit

(MAKELCID(MAKELANGID(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT))

erzeugt. hier steht es wie es geht.

//EDIT

Aber leider bringt das nicht wirklich was - immer noch falsch:

Delphi-Quellcode:
function MAKELCID(LangId, SortId: WORD): DWORD;
begin
  Result := (DWORD(SortId) shl 16) or DWORD(LangId);
end;

function MAKELANGID(PrimaryLang, SubLang: Word): WORD;
begin
  Result := (SubLang shl 10) or PrimaryLang;
end;

procedure TForm1.TntButton3Click(Sender: TObject);
const
  NORM_LINGUISTIC_CASING = $08000000;
  LINGUISTIC_IGNORECASE = $10;
  LANG_INVARIANT = $7F;
begin
  if (CompareStringW((MAKELCID(MAKELANGID(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT)),
                     0,
                     'HÜBNER', Length('HÜBNER'),
                     'HUEBNER', Length('HUEBNER')) - 2) = 0 then
    ShowMessage('Fehler');
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:51 Uhr.
Seite 2 von 5     12 34     Letzte »    

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