PDA

Tam Sürümünü Görmek İçin : cannot convert parameter 1 from 'char [15]' to 'LPCWSTR'


Attalian
21/05/2007, 11:27
Merhabalar bu kodu DevCpp de çalıştırdım ancak Visual Studio da hata veriyor.

winmm.lib kütüphanesini de ekledim

//______________________________________________

#include <cstdio> // getchar()
#include <iostream>
#include <windows.h> // PlaySound()

#define SND_FILENAME 0x20000 // from mmsystem.h
#define SND_LOOP 8
#define SND_ASYNC 1
#define SND_ALIAS 0x10000

int main()
{
char sound[] = "C:/ohhnooo.wav";

PlaySound(sound,NULL,SND_FILENAME|SND_ASYNC);

getchar();

return 0;
}

//______________________________________________


HATA:
error C2664: 'PlaySoundW' : cannot convert parameter 1 from 'char [15]' to 'LPCWSTR'

Sizce sorun nedir? :/


golgepapaz
21/05/2007, 11:57
typedef wchar_t WCHAR ; (1)

typedef CONST WCHAR *LPCWSTR;(2)

eger 1 i 2 de yerine koyarsak

typedef CONST wchar_t* LPCWSTR burdan

LPCWSTR == const wchar_t * bulunur;


arrayler fonksiyona gecerlerken isaretci tipe bozulurlar(decay)

bu durumda sound'un tipi

const char * bulunur

ama const char* != const wchar_t* olduguna gore sound'u buna uydurmamaiz gerkeiyor

wchar_t sound[]=L"C:/ohhnooo.wav"; diye tanimlarsak (L onemli)

sorunumuz cozulmus olur..

Not: biraz salakca oldu ama idare et.:).

Attalian
21/05/2007, 12:10
Olur mu dostum harikasın, çok güzel anlatmişsın.
Sorun çözüldü, çok teşekkür ederim :)

golgepapaz
21/05/2007, 12:24
aslinda asil olay senin proje ayarlarinda UNICODE diye bir preprocessor direktifi tanimli.
windows fonksiyonalarinin iki ayri versiyonu bulunur (senin durumunda PlaySound ve PlaySoundW) biri normal biriside wide-stringler icin... eger projede UNICODE tanimliysa fonksiyonun wide versiyonu cagrilir, sende olna durumda bu aslinda senin orjinal kodda calisir ama UNICODE'u undef etmen gerekiyor projede

Attalian
21/05/2007, 12:37
aslinda asil olay senin proje ayarlarinda UNICODE diye bir preprocessor direktifi tanimli.
windows fonksiyonalarinin iki ayri versiyonu bulunur (senin durumunda PlaySound ve PlaySoundW) biri normal biriside wide-stringler icin... eger projede UNICODE tanimliysa fonksiyonun wide versiyonu cagrilir, sende olna durumda bu aslinda senin orjinal kodda calisir ama UNICODE'u undef etmen gerekiyor projede

Anladım, evet. Zaten yaptığım araştırmalarda da sürekli unicode tanımlamalarına varıyordum ama uğraşmak istemedim onla çok fazla. Yardımın çok işe yaradı, tekrar teşekkürler.