[WinAPI] konwersja zmiennej typu int na zmienną typu LPCSTR

0

Witam
Otóż mam problem ze zrobieniem takiej czynności: chcę jakąś zmienną typu int przekonwertować na typ LPCSTR. Guglowałem ( :P ) ze 2 godzinki, ale jakoś nic mi to nie dało... Więc mógłby mi ktoś podać jak to zrobić? Byłbym bardzo wdzięczny. ;)

Poniżej zamieszczę wycinek programu gdzie chcę wykonać tą operację (pętla ta tworzy przyciski... wiem, nic przydatnego xD, tak się bawiłem, bo praktycznie dopiero co zaczynam z WinAPI... [green] ) :

	for (int i = 1; i < 10; i = i + 3)
	{
		int przes = 1;
		for (int j = 0; j < 3; j++)
		{
			int x = i + j;
			button_num[i+j] = CreateWindowEx(0, /* tutaj ma być coś co zmieni zmienną x na ciąg znaków typu LPCSTR  */, buttonfazer[x],
			WS_CHILD | WS_VISIBLE, (30+40*j), (40*przes*(i+1)), 30, 30,
			hWnd, NULL, hInstance, NULL);
		}
		przes++;
	}

PS. nie zwracajcie uwagi na ułożenie przycisków po skompilowaniu programu... [green]

0

Ekhm, i nie przyszło Ci na myśl żeby sprawdzić czym jest to LPCSTR? to zwyczajne const char *.

char zuo[69];
wsprintf(zuo, "%d", 666);

button_num[i+j] = CreateWindowEx(0, zuo // ...
0

Sorki, dalej sobie nie daję rady... Ja akurat chcę zamknąć to w postaci funkcji, ale coś mi to nie wychodzi.

Log Visual Expresa wywala to:

1>c:\...\main.cpp(33) : error C2664: 'wsprintfA' : cannot convert parameter 1 from 'char *[]' to 'LPSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\...\main.cpp(74) : error C2664: 'int_to_lpcstr' : cannot convert parameter 2 from 'char (*)[100]' to 'char *[]'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

Tutaj jest ta moja niedziałająca funkcja:

char int_to_lpcstr(int liczba, char *cache[])
{
	wsprintf(cache, "%d", liczba);
}

a tutaj reszta programu:

	for (int i = 1; i < 10; i = i + 3)
	{
		int przes = 1;
		for (int j = 0; j < 3; j++)
		{
			int x = i + j;
			char cache[100];
			int_to_lpcstr(x, &cache);
			button_num[i+j] = CreateWindowEx(0, "BUTTON", cache,
			WS_CHILD | WS_VISIBLE, (30+40*j), (40*przes*(i+1)), 30, 30,
			hWnd, NULL, hInstance, NULL);
		}
		przes++;
	}

Dołączane biblioteki to: windows.h, string i iostream.

No i co z tym zrobić?

Btw. na tym pierwszym zamieszczonym przeze mnie kodzie wkradł się mały błąd, bo drugim argumentem funkcji CreateWindowEx miało być "BUTTON", natomiast w 3-cim argumencie miał być ten przetworzony int.

0

Zrezygnuj albo z * albo z [] bo w efekcie zamiast c-stringa - tablicy charów - masz tablicę dwuwymiarową.

0

Jeden problem mniej :)
Ale nadal wywala w logu to:

1>c:\...\main.cpp(74) : error C2664: 'int_to_lpcstr' : cannot convert parameter 2 from 'char (*)[100]' to 'char *'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
0

Tak ma być:

void int_to_lpcstr(int liczba, char *cache)
{
        wsprintf(cache, "%d", liczba);
}

// użycie:

char wtf[10];
int_to_lpcstr(6669, wtf);
0

Jest! Działa! :d Mój kilkugodzinny problem rozwiązany. Dzięki, bo ten stuff przyda mi się także na przyszłość. [green]

0
krwq napisał(a)

lub alternatywnie
http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/

No raczej nie, ta funkcja nie jest ani standardowa dla C ani dla C++, to rozszerzenie kompilatorów, wsprintf zaś jest standardową funkcją WINAPI...

0

to jak nie ma to:

bool blad = false;
int itoa(char* t)
{
  int w=0;
  while(*t)
   {
    if (*t<'0' || *t>'9')
     {
      blad = true;
      return 0;
     } else
     w=w*10+ *t -'0';
     ++t;
   }
  return w;
}
0
krwq napisał(a)

to jak nie ma to:

bool blad = false;
int itoa(char* t)
{
  int w=0;
  while(*t)
   {
    if (*t<'0' || *t>'9')
     {
      blad = true;
      return 0;
     } else
     w=w*10+ *t -'0';
     ++t;
   }
  return w;
}

Nie bądź śmieszny, nie dość, że niedziałające to oczywiście nie to co trzeba - to nie itoa tylko atoi... Może od razu pisać całego Windowsa samemu zamiast wykorzystywać udostępniane funkcje? Standardowe sprintf lub Windowsowe wsprintf jest niewystarczające, prawda?

1 użytkowników online, w tym zalogowanych: 0, gości: 1