hi
mich würde mal interessieren, was es mit diesem LPCWSTR auf sich hat.
seitdem ich express 2005 verwende, meckert der bei recht vielen funktionen immer, dass ein LPCWSTR erwartet wird, obwohl das früher mit nem normalen string, oder dem alten c string (char*, char[]) ganz normal funktionierte.
und weil ich grad noch am anfang meines "projektes" bin, würd mich gleich interessieren, ob man das doch irgendwie wieder vereinfachen kann, weil das sonst ein ziemlicher tippaufwand ist mit viel mehr funktionsaufrufen, als wenn es normal gehen würde.
als bsp. meine 2 soundfunktionen, die einen sound starten und wieder beenden (entweder music, die läuft im hintergrund ab) oder ein effekt (auf diesen wird gewartet bis er fertig abgespielt wurde).
im prinzip wären das grob gesagt nur 3 zeilen:
den orderstring mittels sprintf( das anscheinend veraltet ist
) generieren und mit mciSendString dann den erstellten orderstring senden.
|
C-/C++-Quelltext
|
1
2
3
|
mciSendString( L"open \"Irgendwas..mp3\" alias bla wait", 0, 0, 0);
mciSendString( L"play bla from 0", 0, 0, 0);
mciSendString( L"close bla", 0, 0, 0);
|
jetzt wollte ich ebene die strings mit sprintf generieren, was schon mal nicht ging, weil LPCWSTR erwwartet wird.
also bischen gegoogeld und dann irgendwie ne recht umständliche lösung irgendwie gefunden.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
/*
* function: void SoundPlay( char* stFileName, int iType, bool bRepeat )
*
* parameters: - takes FilePath, Type of music and should the sound repeat
- 0 = Music
- 1 = Effekt*/
void SoundPlay( char* stFileName, int iType, bool bRepeat )
{
// Variables
wchar_t stOrder[50];
char* stType;
char buffer[50];
if( iType )
// Effect
stType = "Effect";
else
// Music
stType = "Music";
std::sprintf( buffer, "open \"Sounds\\%s.mp3\" alias %s wait", stFileName, stType );
std::mbstowcs( stOrder, buffer, sizeof(buffer) );
mciSendString( stOrder, 0, 0, 0);
// Check if sound should be repeated
if( bRepeat )
// Repeat sound
std::sprintf( buffer, "play %s from 0 repeat", stType );
else if( iType )
// Effect sound - wait
std::sprintf( buffer, "play %s from 0 wait", stType );
else
// music - Do not repeat
std::sprintf( buffer, "play %s from 0", stType );
std::mbstowcs( stOrder, buffer, sizeof(buffer) );
mciSendString( stOrder, 0,0,0);
} // endfunction: SoundPlay
/*
* function: void SoundStop( int iType )
*
* parameters: - takes Type of music
- 0 = Music
- 1 = Effekt*/
void SoundStop( int iType )
{
// Variables
wchar_t stOrder[50];
char* stType;
char buffer[50];
if( iType )
// Effect
stType = "Effect";
else
// Music
stType = "Music";
std::sprintf( buffer, "close %s", stType );
std::mbstowcs( stOrder, buffer, sizeof(buffer) );
mciSendString( stOrder, 0,0,0);
} // endfunction: SoundStop
|
so sieht das jetzt aus.
ich brauch ein char array und ein wchar_t array (alteernativ auch char* und wchar_t*, aber dann wird das noch länger und umständlicher) und 2 funktionen
sprintf und mbstowcs.
ich weiß ja nicht,wie ihr das seht, aber irgendwie find ich das einfach unsauber.
gut wäre es,wenn es sowas gäbe wie
|
C-/C++-Quelltext
|
1
2
3
4
|
LPCWSTR bla;
sprintf( bla, L"unsere order wird zusammengebaut" );
mciSendString( bla, 0,0,0 );
|
kennt jemand ne lösung dafür oder einen besseren weg?
mfg
Simon
P.S.: hoffe ich hab mich klar genug ausgedrückt, was ich eigentlich will