อยากถามเรื่องภาษาCกับwin32 API with C

กระทู้คำถาม
os win7 64bit
Microsoft Visual Studio 2010

1.ภาษาC
ในโค้ดนะคับ อยากรู้ว่า delete(b10(i)) ไหมมันถึงไม่ผ่านนะคับ งงจัง - -*

#include<stdio.h>
#include<malloc.h>

void main(void)
{
    int i=0,j=0,k=0;
        char **b10=NULL;

    b10=(char **)malloc(sizeof(char)*5);
    printf("&b10=%d \n",&b10);
    printf("b10=%d \n",b10);
    for (i=0;i<5;i++)
    {
        b10(i)=(char *)malloc(sizeof(char)*5);
        if(i+1==5)
        {
            *(b10(i))='\0';
        }
        else
        {
            *(b10(i))=97+i;
        }
        printf("&b10(%d)=%d \n",i,&b10(i));
        printf("b10(%d)=%d \n",i,b10(i));
        printf("*(b10(%d))=%c \n\n",i,*(b10(i)));    
    }
      printf("delete \n");
    for(i=0;i<5;i++)
    {
        delete(b10(i));
        b10(i)=NULL;
    }
    delete(b10);
    b10=NULL;
    printf("-------------------------------\n");
}


2.พอดีพึ่งหัดเริ่มใช้win32API นะคับ แล้วมัน
ERROR  fatal error LNK1104: cannot open file 'G:\C_C++\test_scheay02\Debug\test_scheay02.exe'

ตอนแรกก็debugได้แล้วนะคับ ขึ้นหน้าต่างมาให้แล้ว แล้วผมก็ลองนู้นลองนี้ไปเรื่อย คราวนี้ built ไม่ได้เลย - -* ไม่มีตัวexeใน debugเลยอะคับ ไม่รู้จะแก้ยังไงดี - -*

#include<windows.h>
#include<windowsx.h>
#include"resource.h"

HWND hwnd=NULL;

LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam);
int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow);
void InitApp(HINSTANCE hinstance);

LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
    switch(msg)
    {
        case WM_PAINT :
                        break;
        case WM_DESTROY :
                        PostQuitMessage(0);
                        break;
    }
    return DefWindowProc(hwnd,msg,wparam,lparam);
}

int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow)
{

    InitApp(hinstance);
    //HWND hwnd;
    MSG msg;

    ShowWindow(hwnd,ncmdshow);
    UpdateWindow(hwnd);

    while(1)
    {
        if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
        {
            if(!GetMessage(&msg,NULL,0,0))
                return(msg.wParam);
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return(msg.wParam);
}

void InitApp(HINSTANCE hinstance)
{
    WNDCLASSEX winclass;
    winclass.cbSize =sizeof(WNDCLASSEX);
    winclass.style =CS_VREDRAW|CS_HREDRAW|CS_OWNDC|CS_DBLCLKS;
    winclass.lpfnWndProc =WindowProc;
    winclass.cbClsExtra =0;
    winclass.cbWndExtra =0;
    winclass.hInstance =hinstance;
    winclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);
    winclass.lpszClassName ="SCHEAY";
    winclass.lpszMenuName =MAKEINTRESOURCE(IDR_MAIN_MENU1);
    winclass.hIcon =LoadIcon(hinstance,IDI_APPLICATION);
    winclass.hCursor =LoadCursor(hinstance,IDC_ARROW);
    winclass.hIconSm =LoadIcon(hinstance,IDI_APPLICATION);

    RegisterClassEx(&winclass);

    hwnd=CreateWindowEx(NULL,"SCHEAY","scheay_demo",WS_OVERLAPPEDWINDOW,200,200,800,800,NULL,NULL,hinstance,NULL);

}

ปล.ขอขอบคุณทุกท่านที่ช่วยเหลือนะคับ _/\_
ปล.ขออนุญาติแทน b10(i) เป็นarrarนะคับ ใช้ สี่เหลี่ยมละมันโพสไม่ขึ้น - -*
แก้ไขข้อความเมื่อ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 2
ภาษา C ไม่มี keyword new กับ delete
มีแต่ function malloc() กับ free() ใน standrard library ครับ
และถึงแม้จะใช้ C++ ก็จะใช้ปนกันไม่ได้
คืออะไรที่มาจาก malloc() ก็ต้องใช้ free() ในการคืน จะใช้ delete ไม่ได้
และที่ new ขึ้นมาก็ต้องใช้ delete ไม่ใช่ free() ครับ

โปรแกรมที่เขียนมีที่ผิดหลายจุด


char **b10=NULL;
b10=(char **)malloc(sizeof(char)*5);

ต้องเป็น

char **b10=NULL;
b10=malloc(sizeof(char *)*5);



printf("&b10=%d \n",&b10);
printf("b10=%d \n",b10);

%d ใน printf คือการเอาค่า int ไปแสดงเป็นเลขฐานสิบ แต่ที่ส่งไปทั้ง &b10 กับ b10 เป็น pointer ทั้งคู่
ถ้าใช้ใน mode 64 bit pointer ก็จะมีขนาด 64 bit ส่วน int เป็น 32 bit
ส่งไป 64 bit แต่เอาไปแสดงแค่ 32 bit ค่ามันก็มั่วสิครับ
ถ้าอยากดูค่าของ pointer จริงๆ ให้ใช้ long หรือ unsigned long แทนครับ

printf("&b10=%ld \n",(long)&b10);
printf("b10=%ld \n",(long)b10);

หรือ

printf("&b10=%lx \n",(long)&b10);
printf("b10=%lx \n",(long)b10);



ยังมีที่ผิดอื่นอยู่ แต่ไม่รู้ว่า จขกท เอา code มาให้ดูหมดหรือเปล่า

ถ้าเป็นภาษา C จริง ไม่มี

void main()

นะครับ มีแต่

int main() { ... }
int main (int argc, char **argv) { ... }



malloc.h ไม่ใช่ standard header file ครับ
function prototype ของ malloc() กับ free() อยู่ใน stdlib.h
ดังนั้น #include <stdlib.h> แทนครับ


ส่วนข้อสองไม่ทราบครับ





;>)
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่