AGB  ·  Datenschutz  ·  Impressum  







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

IntToStr zu WCHAR

Ein Thema von EWeiss · begonnen am 4. Aug 2017 · letzter Beitrag vom 5. Aug 2017
Antwort Antwort
Seite 2 von 3     12 3      
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: IntToStr zu WCHAR

  Alt 5. Aug 2017, 02:02
Dein Fehler kommt daher, dass du deine Variable als WCHAR (einzelnes Zeichen = WideChar) deklarierst und nicht als WCHAR* (PWideChar).
Sorry ist das gleiche Problem
Code:
WCHAR * StreamLenght = std::to_wstring(Second / 60) + L"Min " + std::to_wstring(Second %= 60) + L"Sec";
Zitat:
Fehler (aktiv) E0413 Es ist keine passende Konvertierungsfunktion von ""std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>>"" in ""WCHAR *"" vorhanden.
Zitat:
Fehler C2440 "Initialisierung": "std::basic_string<wchar_t,std::char_traits<wchar_ t>,std::allocator<wchar_t>>" kann nicht in "WCHAR *" konvertiert werden
Danke.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#12

AW: IntToStr zu WCHAR

  Alt 5. Aug 2017, 02:11
Probier mal:
Delphi-Quellcode:
std::wstring streamLength = std::to_wstring(Second / 60) + L"Min " + std::to_wstring(Second %= 60) + L"Sec";
const WCHAR* ptr = streamLength.c_str();
Der Assignment Operator ist scheinbar nicht überladen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: IntToStr zu WCHAR

  Alt 5. Aug 2017, 02:20
Probier mal:
Delphi-Quellcode:
std::wstring streamLength = std::to_wstring(Second / 60) + L"Min " + std::to_wstring(Second %= 60) + L"Sec";
const WCHAR* ptr = streamLength.c_str();
Der Assignment Operator ist scheinbar nicht überladen.
Ja genau das habe ich vorher auch versucht.
Das Problem dabei ist das dann die Berechnung von (Second / 60) fehlschlägt.
Seltsamer weise stimmen aber die Sekunden (Second %= 60). (Second mod 60).

Zudem kommt noch das ich einen "const WCHAR*" nicht an SetWindowText übergeben kann.
So! stimmen die
Code:
        std::wstring Min_tmp = std::to_wstring(Second / 60);
        WCHAR * Min = &Min_tmp[0];
gruss

Geändert von EWeiss ( 5. Aug 2017 um 02:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#14

AW: IntToStr zu WCHAR

  Alt 5. Aug 2017, 02:43
Also %= ist zumindest auch falsch, es muss nur % sein. var += value und Konsorten sind Kurzformen von var = var + value .

So funktioniert es bei mir ohne Probleme:
Delphi-Quellcode:
uint32_t seconds = 350;

std::wstring title = std::to_wstring(seconds / 60) + L"Min " + std::to_wstring(seconds % 60) + L"Sec";

AllocConsole;
SetWindowTextW(GetConsoleWindow(), title .c_str());
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

AW: IntToStr zu WCHAR

  Alt 5. Aug 2017, 02:53
Also %= ist zumindest auch falsch, es muss nur % sein. var += value und Konsorten sind Kurzformen von var = var + value .

So funktioniert es bei mir ohne Probleme:
Delphi-Quellcode:
uint32_t seconds = 350;

std::wstring title = std::to_wstring(seconds / 60) + L"Min " + std::to_wstring(seconds % 60) + L"Sec";

AllocConsole;
SetWindowTextW(GetConsoleWindow(), title .c_str());
Das ist nett von dir Danke..
So funktioniert es 100%. Kann also die 100 Zeilen wieder löschen.

Wenn du möchtest kannst mir dabei auch noch helfen. ?
Delphi-Quellcode:
         //lbl_VideoInfo.Caption : = FormatFloat('#,##0', aMediaProperty.Video_Width) + ' x ' +
         // FormatFloat('#,##0', aMediaProperty.Video_Height) + ', ' +
         // FormatFloat('##0.00', aMediaProperty.Video_FPS) + ' FPS';
         //SetWindowText(hlblVideoInfo, VideoInfo);
         //lbl_AudioProperty.Caption : = intToStr(aMediaProperty.Audio_Channels) + ' Channel, ' +
         // FormatFloat('#,##0', aMediaProperty.Audio_Samplerate) + ' SPS, ' +
         // intToStr(aMediaProperty.Audio_BitsPerSample) + ' BPS';
         //SetWindowText(hlblAudioProperty, AudioProperty);
Danach wären die String Probleme beseitigt.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#16

AW: IntToStr zu WCHAR

  Alt 5. Aug 2017, 03:10
Float Conversions mit bestimmter Präzision und Formatierung sind etwas umständlich bei C++. Es gibt mehrere Möglichkeiten:
https://stackoverflow.com/questions/...decimal-digits

Also entweder über std::stringstream und set::setw() und set::setprecision() . Oder über die C-Style Format Funktionen wie std::snprintf .

Da müsstest du schauen, was dir lieber ist.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

AW: IntToStr zu WCHAR

  Alt 5. Aug 2017, 03:19
Float Conversions mit bestimmter Präzision und Formatierung sind etwas umständlich bei C++. Es gibt mehrere Möglichkeiten:
https://stackoverflow.com/questions/...decimal-digits

Also entweder über std::stringstream und set::setw() und set::setprecision() . Oder über die C-Style Format Funktionen wie std::snprintf .

Da müsstest du schauen, was dir lieber ist.
Ok
Werde mich mal umsehen.

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

AW: IntToStr zu WCHAR

  Alt 5. Aug 2017, 08:44
So geht's aber auch wieder so viele Zeilen
Inklusive kleinen Helfern.

Code:
#define long_proc_c typedef long (__cdecl *Proc)
Code:
HMODULE MSVCRT() {
    static HMODULE hModule;
    if (hModule == 0) { hModule = LoadLibrary(L"MSVCRT"); }
    return hModule;
}
Code:
long Add_Str(OUT WCHAR* dest, IN WCHAR* srce) {
    long nRet = -1; // Error
    HMODULE hModule = MSVCRT();
    if (hModule) {
        long_proc_c(WCHAR*, WCHAR*, size_t);
        Proc hProc = (Proc)GetProcAddress(hModule, "wcsncat");
        if (hProc) { nRet = hProc(dest, srce, _TRUNCATE); }
    }
    return nRet;
}
Code:
       
Add_Str(VideoInfo, STRL(aMediaProperty.Video_Width));
Add_Str(VideoInfo, L" x ");
Add_Str(VideoInfo, STRL(aMediaProperty.Video_Height));
Add_Str(VideoInfo, L", ");
Add_Str(VideoInfo, STRD(aMediaProperty.Video_FPS));
Add_Str(VideoInfo, L" FPS");
SetWindowText(hLblVideoInfo, VideoInfo);
gruss

Geändert von EWeiss ( 5. Aug 2017 um 08:52 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: IntToStr zu WCHAR

  Alt 5. Aug 2017, 12:27
Zu Deiner Lösung sag ich jetzt nix.........

Code:
#include <stdio.h>

wchar_t Buffer[100];
int err = _snwprintf_s(Buffer, 100, 99, L"%.3f x %.3f y , %6.2f FPS", aMediaProperty.Video_Width, aMediaProperty.Video_Height, aMediaProperty.Video_FPS);
if (err <0){
 // Buffer to small fix it
}
else
SetWindowText(hLblVideoInfo, Buffer);
Fritz Westermann
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

AW: IntToStr zu WCHAR

  Alt 5. Aug 2017, 13:43
Zu Deiner Lösung sag ich jetzt nix.........

Code:
#include <stdio.h>

wchar_t Buffer[100];
int err = _snwprintf_s(Buffer, 100, 99, L"%.3f x %.3f y , %6.3f FPS", aMediaProperty.Video_Width, aMediaProperty.Video_Height, aMediaProperty.Video_FPS);
if (err <0){
 // Buffer to small fix it
}
else
SetWindowText(hLblVideoInfo, Buffer);
Es wäre schön wenn du etwas gesagt hättest
Gut dann ich.. selbst erarbeitet. (Stolz)

Warum soll ich die MSVC.. hehehhe (VCL) verwenden wenn es nicht nötig ist?
Warum künstlich den Code um 250 KB und hoch vergrößern wenn es auch statisch zu lösen ist.
Ok ist nicht schön aber NONVCL oops meine natürlich NONMSVC.

Aber Danke für deinen Lösungsansatz.
Würde gerne wissen wie sich deine Lösung zusammen setzt.
Also die Formatierung.

Auch in C++ kann man eine EXE von 3 MB und mehr erstellen es geht aber auch in 64 KB das ist kein Witz,

Zitat:
warning C4477: "_snwprintf_s": Die Formatzeichenfolge "%.3f" erfordert ein Argument vom Typ "double", das variadic-Argument "1" weist aber den Typ "int" auf.
warning C4477: "_snwprintf_s": Die Formatzeichenfolge "%.3f" erfordert ein Argument vom Typ "double", das variadic-Argument "2" weist aber den Typ "int" auf.
Code:
WCHAR* STRD(IN double N) {
    static WCHAR ws[128] = { 0 };
    swprintf(ws, strSize(ws), L"%f", N);
    return (WCHAR*)ws;
}
oder
Code:
WCHAR VideoInfo[MAX_PATH] = { 0 };
_snwprintf_s(VideoInfo, MAX_PATH, 259, L"%d x %d, %6.3f FPS", aMediaProperty.Video_Width, aMediaProperty.Video_Height, aMediaProperty.Video_FPS);
SetWindowText(hLblVideoInfo, VideoInfo);
ok glaube habe es verstanden.. Danke
Code:
WCHAR AudioProperty[MAX_PATH] = { 0 };
_snwprintf_s(AudioProperty, MAX_PATH, 259, L"%d Channel, %d SPS, %d BPS", aMediaProperty.Audio_Channels, aMediaProperty.Audio_Samplerate, aMediaProperty.Audio_BitsPerSample);
SetWindowText(hLblAudioProperty, AudioProperty);
gruss

Geändert von EWeiss ( 5. Aug 2017 um 14:51 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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:01 Uhr.
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