線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1165
推到 Plurk!
推到 Facebook!

程式編譯上的新手問題

尚未結案
yaksa
一般會員


發表:1
回覆:1
積分:0
註冊:2005-02-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-17 21:11:59 IP:218.162.xxx.xxx 未訂閱
想學程式設計而去買了一本書,沒想到第一個程式就出現問題,也許是太基本了作者沒有詳細說明,只好來這裡請教各位,希望能得到解答。    我是使用dev-c++(因為免費)作程式的編譯,作者在書中附了三個檔案(一個是creatwindow.cpp一個是resouce.h一個是resource.rc)和一個可執行檔(exe),可是我用dev-C++去編譯原始檔(cpp)得到的程式有七百多k,而書中附的執行檔才28k,而且和我編譯出的程式(編譯時三個檔案放在同一個目錄,而且沒出現問題)功能上也不相同(我的比較少),推測是沒有將resource.rc這個檔一起編譯進去,能告訴我要如何才能正確的編譯嗎?    以下附上三個檔案的內容 creatwindow.cpp    /*----- CreateWindow.C -----*/    #include  #include "Resource.h" HINSTANCE hInst; LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = "MyApp" ; HWND hWnd ; MSG msg ; WNDCLASSEX wndclass ; wndclass.cbSize = sizeof (wndclass) ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW 1) ; wndclass.lpszMenuName = "IDR_MENU1" ; wndclass.lpszClassName = szAppName ; wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ; RegisterClassEx (&wndclass) ; hInst = hInstance; hWnd = CreateWindow (szAppName, "函式示範:123", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ; ShowWindow (hWnd, iCmdShow) ; UpdateWindow (hWnd) ; while (GetMessage (&msg, NULL, 0, 0) ) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } LRESULT CALLBACK WndProc (HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { HDC hDC ; switch (iMsg) { case WM_CREATE: return 0 ; case WM_PAINT: { PAINTSTRUCT ps ; hDC = BeginPaint (hWnd, &ps) ; EndPaint (hWnd, &ps) ; } return 0 ; case WM_COMMAND: switch( LOWORD(wParam) ) { case IDM_Demo: MessageBox (hWnd, "函式示範", "IDM_Demo", MB_OK) ; return 0 ; case IDM_Exit: DestroyWindow (hWnd) ; return 0 ; } break ; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } /*-- End of switch --*/ return DefWindowProc (hWnd, iMsg, wParam, lParam) ; } /*----End of Program----*/ resouce.h //{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by Resource.rc // #define IDM_Exit 40001 #define IDM_Demo 40002 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40003 #define _APS_NEXT_CONTROL_VALUE 1000 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif resource.rc //Microsoft Developer Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "afxres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // Chinese (Taiwan) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHT) #ifdef _WIN32 LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL #pragma code_page(950) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Menu // IDR_MENU1 MENU DISCARDABLE BEGIN POPUP "檔案(&F)" BEGIN MENUITEM "結束(&X)", IDM_Exit END POPUP "示範(&S)" BEGIN MENUITEM "範例(&D)", IDM_Demo END END #endif // Chinese (Taiwan) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED
fnk
高階會員


發表:40
回覆:149
積分:102
註冊:2004-01-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-18 02:44:46 IP:140.124.xxx.xxx 未訂閱
以下是擷取自 "深入淺出MFC" 侯俊傑 2nd. 這一本書範例的Makefile.. 主要是在講程式的開發流程...
#0006 all: generic.exe
#0007
#0008 generic.res : generic.rc generic.h
#0009 rc generic.rc
#0010
#0011 generic.obj : generic.c generic.h
#0012 cl -c -W3 -Gz -D_X86_ -DWIN32 generic.c
#0013
#0014 generic.exe : generic.obj generic.res
#0015 link /MACHINE:I386 -subsystem:windows generic.res generic.obj #0016 libc.lib kernel32.lib user32.lib gdi32.lib    第8-9行....就是說明..會利用RC.exe(RC Complier)..這個工具...
           配合程式的rc檔(generic.rc)和標頭檔(generic.h)..
           以產生一個generic.res的檔案(binary)..    第11-12行..則是說明..如何利用Complier..配合generic.c..
           以及generic.h..來產生Obj檔...    第14-16行..則是說明..如何利用linker...配合之前產生的..
           generic.res 和 generic.obj..來產生執行檔..
下面有一張圖..可以讓你更了解...同樣出自於侯大師的著作...
結論:若你認為是沒有把RES檔加入一起編輯...
     而造成你的問題..那你可以試著利用RC.exe...
     將程式的rc檔...編譯成RES檔...
=========== 有興趣,就能進步 ===========
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-18 09:26:45 IP:210.68.xxx.xxx 未訂閱
HI yaksa: 程式請縮排,煩請修改,謝謝您的配合 縮排與修改方式請參考版規說明 < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=48259">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=48259
yaksa
一般會員


發表:1
回覆:1
積分:0
註冊:2005-02-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-18 22:52:41 IP:218.162.xxx.xxx 未訂閱
感謝fnk的解說,最近忙了點,會抽個空去試試這個方法能不能解決我的問題。另外也感謝版主的提醒,由於我的問題不是出在程式碼,所以把冗長的程式碼刪了,以後我會記得使用
指令,方便大家讀文章。
系統時間:2024-05-05 5:12:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!