![]() |
widestringreplace
hallo
wisst ihr, ob es ein äquivalent der stringreplace - funktion für widestrings gibt? danke, martin |
Re: widestringreplace
|
Re: widestringreplace
|
Re: widestringreplace
Zitat:
sag mal, wie bekomm ich es hin, dass mir die api der tnt-library angezeigt wird? Zitat:
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... |
Re: widestringreplace
Hallo,
Zitat:
Gruß xaromz |
Re: widestringreplace
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:
in meiner datenbank (firebird) hab ich dann die funktion unter dem namen replacesubstring deklariert...
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. aber ein aufruf von:
SQL-Code:
hat als Ergebnis:
select replacesubstring('Muster', 'u', 'a') from rdb$database
[result]Muster[/result] |
Re: widestringreplace
Hallo,
Zitat:
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 |
Re: widestringreplace
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
Re: widestringreplace
Liste der Anhänge anzeigen (Anzahl: 2)
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 |
Re: widestringreplace
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] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 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 by Thomas Breitkreuz