AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

widestringreplace

Ein Thema von sancho1980 · begonnen am 19. Jun 2006 · letzter Beitrag vom 21. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2   
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#1

widestringreplace

  Alt 19. Jun 2006, 20:02
hallo
wisst ihr, ob es ein äquivalent der stringreplace - funktion für widestrings gibt?

danke,

martin
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
Ydobon

Registriert seit: 3. Mär 2006
230 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: widestringreplace

  Alt 20. Jun 2006, 06:51
Z.B. in den Tnt Unicode Controls.
TntSysUtils -> WideStringReplace oder Tnt_WideStringReplace
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: widestringreplace

  Alt 20. Jun 2006, 10:30
Hallo,

Du kannst auch eine meiner Routinen verwenden, die sind wahrscheinlich schneller.

Gruß
xaromz
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#4

Re: widestringreplace

  Alt 20. Jun 2006, 11:53
Zitat von Ydobon:
Z.B. in den Tnt Unicode Controls.
TntSysUtils -> WideStringReplace oder Tnt_WideStringReplace
ich hab die installiert, wusste aber net dass die so ne funktion haben
sag mal, wie bekomm ich es hin, dass mir die api der tnt-library angezeigt wird?

Zitat von xaromz:
Hallo,

Du kannst auch eine meiner Routinen verwenden, die sind wahrscheinlich schneller.

Gruß
xaromz

Ich hatte die schon mal ausprobiert aber irgendwie schien mir, als würde die nicht machen, was sie soll...hmmm

edit: glaub ich muss mich korrigieren...das schien an was anderm gelegen zu haben...
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: widestringreplace

  Alt 20. Jun 2006, 12:00
Hallo,
Zitat von sancho1980:
Ich hatte die schon mal ausprobiert aber irgendwie schien mir, als würde die nicht machen, was sie soll...hmmm
Was sollen sie denn machen und was machen sie stattdessen?

Gruß
xaromz
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#6

Re: widestringreplace

  Alt 20. Jun 2006, 12:10
das problem ist, dass ich (erst mit deiner funktion, jetzt mit der tnt-funktion) eine dll geschrieben hatte, auf die ich in in meiner datenbank als udf nutzen wollte; aber das funzt nicht so ganz.
die funktion sieht so aus:
Delphi-Quellcode:
unit Strings;

interface

uses
  SysUtils, TntSysUtils;

  function Replace(s, old, new: PWideChar): PWideChar; cdecl; export;

implementation

function Replace(s, old, new: PWideChar): PWideChar;
begin
  Result := PWideChar(Tnt_WideStringReplace(WideString(S), WideString(Old), WideString(New), [rfReplaceAll]));
end;

end.
in meiner datenbank (firebird) hab ich dann die funktion unter dem namen replacesubstring deklariert...
aber ein aufruf von:

select replacesubstring('Muster', 'u', 'a') from rdb$database hat als Ergebnis:

[result]Muster[/result]
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: widestringreplace

  Alt 20. Jun 2006, 16:30
Hallo,
Zitat von sancho1980:
das problem ist, dass ich (erst mit deiner funktion, jetzt mit der tnt-funktion) eine dll geschrieben hatte, auf die ich in in meiner datenbank als udf nutzen wollte; aber das funzt nicht so ganz.

...

in meiner datenbank (firebird) hab ich dann die funktion unter dem namen replacesubstring deklariert...
aber ein aufruf von:

select replacesubstring('Muster', 'u', 'a') from rdb$database hat als Ergebnis:

[result]Muster[/result]
hast Du mal den Quellcode im Debugger schrittweise ausgeführt? Ich hab' früher auch die Tnt-Routine verwendet, bis ich meine geschrieben hatte, und beide funktionieren eigentlich.

Außerdem ist es immer eine gute Idee, solche Funktionen in einem Programm auszuprobieren, bevor man sie in eine DLL auslagert. Da kann man nämlich besser debuggen.

Gruß
xaromz
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#8

Re: widestringreplace

  Alt 20. Jun 2006, 21:52
kannst du mir bitte sagen, wie ich so meine erzeugte dll jetz testen kann?
ich hab davon nämlich keine ahnung...
irgendwie ne host-anwendung und parameter..aber welche host-anwendung und wo wird da die gewünschte funktion aufgerufen?
ich hab mal meine dll angehängt...vllt kannst es mir ja mal erklären, wär sehr nett!
gruß,

martin
Angehängte Dateien
Dateityp: rar dlls_110.rar (53,6 KB, 3x aufgerufen)
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#9

Re: widestringreplace

  Alt 20. Jun 2006, 22:38
Hallo,

zuerst sollteset Du mal überall ShareMem entfernen. Erstens gehört das (wenn überhaupt) ganz an den Anfang der Projektdatei (.dpr), und zweitens nur, wenn Du Delphi-Strings zwischen einer Delphi-DLL und einem Delphi-Programm austauschen willst.

Ich habe mal ein Testprogramm angehängt, mit dem Du die DLL testen kannst (Start -> Parameter -> Host-Anwendung).
Dabei habe ich festgestellt, dass Du einen Pointer auf einen Speicherbereich übergibst, der am Ende von Replace schon wieder freigegeben wurde. Das kann nicht funktionieren.
Du musst also einen Buffer erstellen, dessen Pointer Du übergibst. Du solltest dann aber aufpassen, dass Du kein Speicherleck fabrizierst.

Ich häng' mal noch die abgeänderte DLL an.

Gruß
xaromz
Angehängte Dateien
Dateityp: zip dlls_178.zip (1,0 KB, 5x aufgerufen)
Dateityp: zip testprojekt_167.zip (1,3 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#10

Re: widestringreplace

  Alt 21. Jun 2006, 07:29
danke, voll nett
trotzdem ist mir das schleierhaft...
wenn mir Tnt_WideStringReplace nen WideString zurückgibt, wieso muss ich dann nochmal von Help nach Result kopieren..ich blick irgendwie nicht, wieso ich nicht gleich schreiben kann:

[edit]hab mir deins nochmal durchgelesen...verstehe...die frage ist dann aber, wie meine ursprüngliche dll überhaupt gelaufen ist und keinen segmentation fault verursacht hat..auf jeden fall danke[/edit]
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf