Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI, C++] Problem z przekazywaniem pointera

Ostatnio zmodyfikowano 2012-12-17 18:53
Autor Wiadomość
codex
Temat założony przez niniejszego użytkownika
[WinAPI, C++] Problem z przekazywaniem pointera
» 2012-12-17 09:13:29
Na przykładzie prostego kodu mam kilka pytań:
1). Coś jest nie tak w miejscu przekazywania pointera dla funkcji FormatMessage ?
2). Jak się pozbyć okna konsoli widocznego podczas startu programu ?
3). Jak zdefiniować makrodefinicję dłuższą niż 1 linia (jakieś ENDM) ?
4). Na przyszłość - jak sformatować kod postu, żeby oddzielić wklejany kod od textu
     -nie wyświetla mi się żadna opcja do tego.

Oto przykładowy kod który ma wyświetlać w MessageBoxie wartość LastError w postaci tekstowej. Problem w tym, że wyświetla mi się puste okno MessageBoxa co sugeruje, że pointer wskazuje na string lecz FormatMessage nie zapisuje pod ten sam adres ???
C/C++
#define SHOWERROR ShowError()
void ShowError()
{
   
    LPSTR buffer;
   
    FormatMessage(( DWORD ) FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,,\
    ( LPCVOID ) 0, GetLastError(),( DWORD ) LANG_NEUTRAL, buffer, 0, 0 );
    MessageBox( HWND_DESKTOP, buffer, "LastError", 0 );
    LocalFree( buffer );
}





int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow )
{
    HANDLE hOpenfile = 0;
   
    hOpenfile = CreateFileW( L"D:\\PATH_NOT_EXIST\\NEWFILE.TXT", GENERIC_ALL,,\
     FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,,\
     CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
    if( hOpenfile == INVALID_HANDLE_VALUE ) SHOWERROR;
   
    if( hOpenfile ) CloseHandle( hOpenfile );
   
    return 0;
}
P-71269
xevuel
» 2012-12-17 15:32:12
1). Coś jest nie tak w miejscu przekazywania pointera dla funkcji FormatMessage ?
Przeanalizuj: » WinAPIFormatMessage

2). Jak się pozbyć okna konsoli widocznego podczas startu programu ?
Poszperaj w ustawieniach projektu.

3). Jak zdefiniować makrodefinicję dłuższą niż 1 linia (jakieś ENDM) ?
C/C++
#define abc \
 3

4). Na przyszłość - jak sformatować kod postu, żeby oddzielić wklejany kod od textu
     -nie wyświetla mi się żadna opcja do tego.
[cpp]...[/cpp]

I na przyszłość - jeden problem = jeden temat :)
P-71281
malan
» 2012-12-17 15:52:15
4. » KursyKurs STC kurs :)
P-71282
codex
Temat założony przez niniejszego użytkownika
» 2012-12-17 16:57:05
Dzięki panowie - wszystko jaśniejsze się zrobiło. Coś mi mówi, że będę miał więcej problemów z tymi typami zmiennych. Czy zawsze przy zmiennych jednakowej długości taki zapis załatwia sprawę?:
C/C++
( POTRZEBNY_TYP_ZMIENNEJ ) jakis_typ_zmiennej;

A może można to wyłączyć gdzieś w opcjach kompilatora - przecież koniec końców ten LPcośtam to i tak DWORD. Zupełnie nie rozumiem celu tej całej kontroli typów w Cpp.
P-71288
xevuel
» 2012-12-17 17:03:38
Czy zawsze przy zmiennych jednakowej długości taki zapis załatwia sprawę?
Zależy od sytuacji.

ten LPcośtam to i tak DWORD
Nieprawda. LPSTR to char*, LPVOID to void*. [MSDN] Windows Data Types
P-71290
codex
Temat założony przez niniejszego użytkownika
» 2012-12-17 17:08:50
??? a to zdziwiony jestem: LPSTR to wskaznik na tablicę znaków - czyli koniec końców DWORD również LPVOID, też wskaźnik czyli DWORD. Jak by nie patrzeć to obszar 4 bajtów w pamięci. Więc nie mam pojęcia (jak na razie ) po co to kontrolować...
P-71291
kubawal
» 2012-12-17 17:15:38
LPVIOD to
void *

DWORD to tzw. dwusłowo, zależnie od komputera, ale zwykle 4 bajty, czyli
unsigned long
 
P-71292
xevuel
» 2012-12-17 17:17:10
DWORD to nie jest wskaźnik.

A 4 bajty w pamieci może zajmować zarówno int, jak i cztery chary. Czy to to samo? :)
P-71293
« 1 » 2
  Strona 1 z 2 Następna strona