| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 954 人关注过本帖
标题:谁能帮我解决这个win32程序的链接错误
只看楼主 加入收藏
dizengrong
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-8-25
结帖率:100%
收藏
 问题点数:0 回复次数:2 
谁能帮我解决这个win32程序的链接错误
下面的程序本是书上的原程序,我只是把它的结构改了一下,原程序是把_WinMain和_ProcWinMain这两个过程的定义放在前面,
而我就把它们的定义放在后面了,然后就在数据段前面加了下面两条语句:
_WinMain                proto
_ProcWinMain        proto    hWnd:DWORD ,uMsg:DWORD ,wParam:DWORD ,lParam:DWORD
可链接时就出错了,我实在不知问题出在哪了,哪位高手帮我指正一下
程序代码:
.386
.model flat,stdcall
option casemap:none

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Include        windows.inc
Include         gdi32.inc
Includelib     gdi32.lib
Include         user32.inc
Includelib     user32.lib
Include         kernel32.inc
Includelib     kernel32.lib

_WinMain                proto
_ProcWinMain        proto    hWnd:DWORD ,uMsg:DWORD ,wParam:DWORD ,lParam:DWORD 

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance    DWORD ?
hWinMain        DWORD ?
.const
szClassName     BYTE  'MyClass',0
szCaptionMain    BYTE  'My first Window!',0
szText            BYTE  'I am coming! Win32!',0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
    invoke _WinMain
    invoke ExitProcess,NULL
end start
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain    proc 
            local        @stWndClass:WNDCLASSEX
            local     @stMsg:MSG
            
            invoke     GetModuleHandle,NULL
            mov        hInstance,eax
            invoke    RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;**************************************************************
;注册窗口类
;**************************************************************
            invoke    LoadCursor,0,IDC_ARROW
            mov        @stWndClass.hCursor,eax
            push        hInstance
            pop        @stWndClass.hInstance
            mov        @stWndClass.cbSize,sizeof WNDCLASSEX
            mov        @stWndClass.style,CS_HREDRAW or CS_VREDRAW
            mov        @stWndClass.lpfnWndProc,offset _ProcWinMain
            mov        @stWndClass.hbrBackground,COLOR_WINDOW+1
            mov        @stWndClass.lpszClassName,offset szClassName
            invoke    RegisterClassEx,addr @stWndClass
;**************************************************************
;建立并显示窗口
;**************************************************************
            invoke    CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassName,offset szCaptionMain,WS_OVERLAPPEDWINDOW,100,100,600,400,NULL,NULL,hInstance,NULL
            mov        hWinMain,eax
            invoke     ShowWindow,hWinMain,SW_SHOWNORMAL
            invoke    UpdateWindow,hWinMain
;**************************************************************
;消息循环
;**************************************************************
            .while    TRUE
                        invoke    GetMessage,addr @stMsg,NULL,0,0
                        .break    .if eax==0
                        invoke    TranslateMessage,addr @stMsg
                        invoke    DispatchMessage,addr @stMsg
            .endw
            ret
_WinMain    endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain        proc    uses ebx edi esi,hWnd,uMsg,wParam,lParam
                        local @stPs:PAINTSTRUCT
                        local @stRect:RECT
                        local    @hDc:DWORD
                        
                        mov    eax,uMsg
                        .if    eax==WM_PAINT
                                invoke     BeginPaint,hWnd,addr @stPs
                                mov         @hDc,eax
                                invoke    GetClientRect,hWnd,addr @stRect
                                invoke    DrawText,@hDc,addr szText,-1,addr @stRect,DT_SINGLELINE or DT_CENTER or DT_VCENTER
                                invoke    EndPaint,hWnd,addr @stPs
                    .elseif     eax==WM_CLOSE
                                invoke    DestroyWindow,hWinMain
                                invoke    PostQuitMessage,NULL
                        .else    
                                invoke    DefWindowProc,hWnd,uMsg,wParam,lParam
                                ret
                        .endif
                        xor eax,eax
                        ret
_ProcWinMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                        
搜索更多相关主题的帖子: 链接 
2008-10-04 20:49
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
哦,哥们,你的程序问题很小.
只要你把" end start"放到程序的最后面最后面,应该就可以了~~我没试过.
2008-10-04 21:38
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
[bo][un]ONEPROBLEM[/un] 在 2008-10-4 21:38 的发言:[/bo]

哦,哥们,你的程序问题很小.
只要你把" end start"放到程序的最后面最后面,应该就可以了~~我没试过.


偶感觉也是
2008-10-05 12:36
快速回复:谁能帮我解决这个win32程序的链接错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041307 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved