Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ Ord to VS c++ WCHAR (https://www.delphipraxis.net/192932-ord-vs-c-wchar.html)

EWeiss 2. Jun 2017 12:47


Ord to VS c++ WCHAR
 
wie bekomme ich ein Ord(34) = '\' nach C++ WCHAR portiert ?

Im Moment mache ich es so..
Code:
WCHAR Quote[] = { 34 };
Was mich dabei stört das Quote dann eine länge von 260 Chars hat.
Ich möchte aber nur den String '\'

gruss

DeddyH 2. Jun 2017 12:52

AW: Ord to WCHAR
 
Aus dem Hut würde ich behaupten:
Delphi-Quellcode:
WideChar(Ord('\'))

EWeiss 2. Jun 2017 12:53

AW: Ord to WCHAR
 
Zitat:

Zitat von DeddyH (Beitrag 1373316)
Aus dem Hut würde ich behaupten:
Delphi-Quellcode:
WideChar(Ord('\'))

C++ ?
Ord gibt es nicht in VS C++.

gruss

himitsu 2. Jun 2017 12:57

AW: Ord to VS c++ WCHAR
 
Zitat:

Zitat von EWeiss (Beitrag 1373315)
Code:
WCHAR Quote[] = { 34 };
Was mich dabei aber stört das Quote dann eine länge von 260 Chars hat.
Ich möchte aber nur den String '\'

Warum definierst du es denn dann als Array/String?

Code:
WCHAR Quote[1] = { 34 };

// bzw.
WCHAR Quote = 34;

EWeiss 2. Jun 2017 12:59

AW: Ord to VS c++ WCHAR
 
Zitat:

Zitat von himitsu (Beitrag 1373318)
Zitat:

Zitat von EWeiss (Beitrag 1373315)
Code:
WCHAR Quote[] = { 34 };
Was mich dabei aber stört das Quote dann eine länge von 260 Chars hat.
Ich möchte aber nur den String '\'

Warum definierst du es denn dann als Array/String?

Code:
WCHAR Quote = 34;

Gute Frage ;)

Werde es mal Testen Danke.

gruss

EWeiss 2. Jun 2017 13:01

AW: Ord to VS c++ WCHAR
 
Jo geht aber der String ist immer noch 260 Zeichen lang.
Werde es mal mit char testen.
funktioniert nicht.

Bei beiden Varianten ist der String wie gesagt immer noch 260 Chars lang.

gruss

bra 2. Jun 2017 13:16

AW: Ord to VS c++ WCHAR
 
Der Backslash ist unter C++ das Escape-Zeichen, muss also selbst eventuell escaped werden ('\\')?
Oder brauchst du \0 als Ende-Kennzeichen des Strings (#34+#0), wobei WCHAR ja eigentlich nur ein Char und kein String ist?

EWeiss 2. Jun 2017 13:40

AW: Ord to VS c++ WCHAR
 
Zitat:

Zitat von bra (Beitrag 1373322)
Oder brauchst du \0 als Ende-Kennzeichen des Strings (#34+#0

Code:
Quote + L'\0'
Das Anhängen des null terminierten Chars hilft leider nicht.

Zitat:

ist unter C++ das Escape-Zeichen
Jo deshalb übergebe ich ja { 34 } Hex Zeichen.

Zitat:

wobei WCHAR ja eigentlich nur ein Char und kein String ist?
Jo ist richtig (habe mich nicht korrekt ausgedrückt) dann frage ich mich aber wie im Shot zu sehen warum dann die gesamte länge des Arrays von 260 Chars angezeigt wird und nicht nur 1 Char wenn ich es so definiere.
Code:
WCHAR Quote[1] = { 34 };
Danke.

gruss

Zacherl 2. Jun 2017 14:06

AW: Ord to VS c++ WCHAR
 
Zitat:

Zitat von EWeiss (Beitrag 1373324)
dann frage ich mich aber wie im Shot zu sehen warum dann die gesamte länge des Arrays von 260 Chars angezeigt wird und nicht nur 1 Char wenn ich es so definiere.
Code:
WCHAR Quote[1] = { 34 };

Es muss wie folgt aussehen:
Code:
WCHAR Quote[2] = { 34, 0 };
Sonst fehlt die Nullterminierung und der String wird so lange, bis zufällig irgendwo im Speicher dahinter mal eine Null steht.

Alternativ kannst du String-Konstanten in C++ auch wie folgt definieren:
Code:
wchar* quote = L"MY STRING";
Hier würde die abschließende Null automatisch hinzugefügt. Das "L" kennzeichnet den String als "WideString".

Edit:
Glaube ich habe nicht ganz verstanden, was du eigentlich vorhast. Kannst du evtl. den kompletten relevanten Teil des C++ Codes mal posten?

EWeiss 2. Jun 2017 14:22

AW: Ord to VS c++ WCHAR
 
Code:
WCHAR Quote[] = { 34 };
...
Code:
S1 = INWSTR(0, sCfg, Quote);
...

Code:
long INWSTR(IN long nIndex, IN WCHAR* MainStr, IN WCHAR* Search) {
    long nRet = -1;
    long nLength = (long) wcslen(MainStr);
    if (nLength && (wcslen(Search))) {
        WCHAR* pdest;
        if (nIndex > -1) {
            pdest = wcsstr(&MainStr[nIndex], Search);
            if (pdest) { nRet = long(pdest - &MainStr[0]); }
        } else {
            nIndex += 1; if (nIndex < 0) { nIndex *= -1; }
            reverse(MainStr, nLength);
            pdest= wcsstr(&MainStr[nIndex], Search);
            if (pdest) { nRet = nLength - long(pdest - &MainStr[0]) - 1; }
            reverse(MainStr, nLength);
        }
    }
    return nRet + 1;
}
Die länge des Arrays Search = Quote ist 252 Chars lang sollte er aber nicht.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:09 Uhr.
Seite 1 von 2  1 2      

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