Win32 programlama

Merhabalar,

Win32 programlamak için neler gerekli?
Bir kaynak kodum var (ek1) ancak onu çalıştıramıyorum çünkü şöyle bir hata alıyorum :

(lib64_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x2e): undefined reference to `WinMain'

Kaynak kodların içindeki bir hatayı mı gösteriyor, yoksa derleyebilmek için bir DLL dosyasına mı ihtiyaç duyuyor bilemiyorum. Sorunu gidermek için direkt Visual Studio kullanabilirim ancak çok ağır ve kullanmakta zorluk çekiyorum. VSCode üzerinde geliştirme yaptığımı belirtmek isterim.

ek1

#ifndef UNICODE
#define UNICODE
#endif 

#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{

    // Register the window class.
    const wchar_t CLASS_NAME[]  = L"Sample Window Class";
    
    WNDCLASS wc = { };

    wc.lpfnWndProc   = WindowProc;
    wc.hInstance     = hInstance;
    wc.lpszClassName = CLASS_NAME;

    RegisterClass(&wc);

    // Create the window.

    HWND hwnd = CreateWindowEx(
        0,                              // Optional window styles.
        CLASS_NAME,                     // Window class
        L"Learn to Program Windows",    // Window text
        WS_OVERLAPPEDWINDOW,            // Window style

        // Size and position
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

        NULL,       // Parent window    
        NULL,       // Menu
        hInstance,  // Instance handle
        NULL        // Additional application data
        );

    if (hwnd == NULL)
    {
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);

    // Run the message loop.
    MSG msg = { };
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);

            // All painting occurs here, between BeginPaint and EndPaint.
            FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
            EndPaint(hwnd, &ps);
        }
        return 0;
    }

    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

(Microsoft Docs)

İyi forumlar.

Merhaba arkadaşlar,

17 küsür saat geçmiş ve henüz bir cevap yok. Konuyu yukarıya taşımak için bu mesajı atıyorum, ayrıca biraz acelem olduğunu söylemeliyim. Yok mu yardım edebilecek birisi?

Merhaba. Buraya bir göz atın lütfen:

Kızma tamam, zaten hata kodu sana hatayı söylüyor

int WINAPI wWinMain(

Böyle bir fonksiyon yok.

WinMain function (winbase.h) - Win32 apps | Microsoft Docs

Yani yazım hatası.

C ve C++ gibi dillerle uğraşırsanız, öncelikle hata okur yazarı olmanız önemli. Çünkü C ve C++ hataları çok ilginç şekilde verir.

wWinMain() diye bir şey uydurma demek yerine, WinMain() fonksiyonunu bulamadım demiş.

Kendince haklı, ilk kontrolü, programın giriş noktasını aramak üzerine yapıyor. Entry point bulsa, devamında böyel bir fonksiyon yok hatası da verecek ama o aşamaya gelememiş.

C ve C++ gibi dillerde, küçük harf büyük harf dahil tüm yazım hatalarına dikkat etmelisin, zamanla hataları okumaya aşina olursun.

C de main() ne kadar önemliyse Windows programlamada da WinMain() fonksiyonu o kadar önemlidir. Bunu yanlış yazarsan gerisine hiç bakmaz dahi.

Kusura bakma, şu saatte dikkatimi çekti mesajınız yoksa görür görmez cevaplardık.

Sırf şu kısmı eklemek için mesajımı bir daha editliyorum…

WinApi ile uğraşanlar için Türkçe kaynak bulmak zordur. Her nedense, HTML, Python, CS vs konularda bir çok konuda Türkçe kaynak bolca bulunur ama, bir türlü bu windows neyin nesidir, nasıl çalışır diye çok kafa yoran olmaz.

Bu nedenler kodları her zaman, kütüphanelerinin izin verdiği kadarını yapabilir. Daha fazlası için geliştiremezler.

Özellikle windows masaüstü programcılığı yapmak isteyenlerin winapi ye ilgi duyması beni mutlu eder.

Bu konuda MSDN okur yazarı olmak yabancı kaynaklardan faydalanmak iyidir. Fakat bazan herkesin ingilizcesi olmadığını unutabiliyorum. Bu nedenle kusuruma bakmayınız. Eğer ihtiyaç duyan olursa, diye eski de olsa en azından winapi anlamak için bir kaynak linki bırakıyorum.

Windows API Programalam Kurs Notları - Uyarlama 1 | C ve Sistem Programcıları Derneği (csystem.org)

Faydasını göreceğinizi düşünüyorum.

Kaliteli Türkçe kaynaklar aklıma geldikçe eklerim bazı konulara, bir çok forumda paylaştım burada da paylaşayım istedim.

Kolay gelsin.

4 Beğeni

Hata mesajini internette aratinca MinGW32 ile wWinMain kullanilmamasi gerektigi yaziyor.

Genel olarak widechar fonksiyonlarindan kacinmani tavsiye ediyorum. ANSI API’lerini UTF-8 codepage’iyle kullanmayi tercih etmelisin.

1 Beğeni