我喷血建议所有的还对C++(VC)发愁的兄弟们都来学学WIN32位汇编~~~建议大家来看看~我自己的经历

msadmin 2002-12-27 02:46:38
如果你对VC(MFC)愁眉苦脸的话,我建议你们现把它暂时放下来,(那说明你对windows消息机制没理解)好好去学学WIN32汇编(记住不是DOS汇编),等你用它作出第一个窗口时我想你应该对WIN编程有个很清晰的认识了,我自己有很深刻的体验,而且比C(SDK)代码执行效率要高,更精简,更可以去逼迫你去认真学计算机体系结构(Intel80x86).都大有好处~~~我就是当是看MFC非常糊涂,最后究其原因是对WIN编程方法没有理解掌握,准备去学C(SDK),但我又买不其那本160元的《programming windows》其他资料太零碎了,偶而看到本WIN32汇编的CHM,看了看代码,都是调用API,感觉代码很清晰,很多原来不理解的地方豁然开朗,推荐罗云彬的新那本书。
现附上我用WIN32汇编写的第一个窗口程序:是不是感觉代码很优美?

.386
.model flat,stdcall
option casemap:none

include windows.inc
include gdi32.inc
includelib gdi32.lib
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

.data?
hInstance dd ?
hWinMain dd ?

.const
szClassName db 'MyClass',0
szButton db 'button',0
szCaptionMain db 'My first Window!',0
szText db '狐狸糊涂',0
szButtonText db '&OK',0
.code
;窗口过程

_ProcWinMain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam ;伪指令uses在子程序进入或退出时自动安插上push和pop寄存器指令
local @stPs:PAINTSTRUCT
local @stRect:RECT
local @hDc

mov eax,uMsg ;uMsg 是接收的消息

.if eax == WM_PAINT ;如果是我们感兴趣的消息则加以处理,处理完后,在 eax 寄存器中传递 0
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 ;DestroyWindow会引发一个WM_DESTROY消息
;invoke PostQuitMessage,NULL
.elseif eax == WM_DESTROY ;方法二
invoke PostQuitMessage,NULL

.elseif eax == WM_CREATE ;建立一个按钮
invoke CreateWindowEx,NULL,\
offset szButton,offset szButtonText,\
WS_CHILD or WS_VISIBLE,\
10,10,65,22,\
hWnd,1,hInstance,NULL
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax ;将eax清零后返回
ret
_ProcWinMain endp

_WinMain proc
local @stWndClass:WNDCLASSEX ;定义一个WNDCLASSEX结构的变量@stWndClass
local @stMsg:MSG

invoke GetModuleHandle,NULL ;得到应用程序的句柄

mov hInstance,eax
invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass ;将@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 or CS_DBLCLKS
mov @stWndClass.lpfnWndProc,offset _ProcWinMain
mov @stWndClass.hbrBackground,COLOR_WINDOW + 1
mov @stWndClass.lpszClassName,offset szClassName
invoke RegisterClassEx,addr @stWndClass ;把结构的地址当参数一次性传给RegisterClassEx

;创建并显示窗口
invoke CreateWindowEx,WS_EX_OVERLAPPEDWINDOW ,\
offset szClassName,offset szCaptionMain,\
WS_OVERLAPPEDWINDOW or WS_VSCROLL,\
100,100,600,400,\
NULL,NULL,hInstance,NULL
mov hWinMain,eax
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain ;程序调用UpdateWindows,这个函数向窗口过程发送一条WM_PAINT消息

;消息循环

.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


start:
call _WinMain
invoke ExitProcess,NULL

end start

其实WINDOWS编程说白就是用户在窗口作了动作,WINDOWS发消息给应用程序,用它的窗口过程来相应消息。谁掌握的API多+对OS的理解,WINDOWS编程不难
...全文
340 88 打赏 收藏 举报
写回复
用AI写文章
88 条回复
切换为时间正序
请发表友善的回复…
发表回复
giantzz 2003-02-09
  • 打赏
  • 举报
回复
当了懂事才"董事",学了汇编才"会编"
这个"会编"敢问谁能理解!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
心雨楼 2003-02-09
  • 打赏
  • 举报
回复
realdreamer,久仰大名,特来拜见
msadmin 2003-02-09
  • 打赏
  • 举报
回复
up
snowshow 2003-01-19
  • 打赏
  • 举报
回复
0101001
招RD和QA 2003-01-19
  • 打赏
  • 举报
回复
up
hurry2002 2003-01-19
  • 打赏
  • 举报
回复
学习,大家的话好精彩!!
我也想去学asm,我还是比较喜欢在了解内部的前提下来用上层的东西,这样,对全局都有一个了解,可以实现最优化!
我是电子专业的,当我不知道变压器(发电厂的那种)的机构和原理时,我可不敢乱碰它!
msadmin 2003-01-19
  • 打赏
  • 举报
回复
用汇编的思想去学SDK,语言就用C就可以了
OldNewton 2003-01-19
  • 打赏
  • 举报
回复
up
ilian 2003-01-16
  • 打赏
  • 举报
回复
看到楼主这么穷真是…

http://www.vcroad.net/progbook/sdkbook/ProgrammingWindows_tw.chm

希望对你有帮助啦!

ilian 2003-01-16
  • 打赏
  • 举报
回复
win32asm 和 win c 开发程序全用 api 都是 sdk 式的编程 ,除了语言的差

异外其它的并没有多少的区别,总之学sdk,汇编要学C也要学。

开发程序如果要选择的话C是最好的,开发木马什么的,做出来的并不比汇编的大

多少,汇编嘛调式和破解就用到了,和和。

beasts 2003-01-16
  • 打赏
  • 举报
回复
折衷方案:C/C++内嵌汇编
msadmin 2003-01-15
  • 打赏
  • 举报
回复
UP
elabs 2003-01-03
  • 打赏
  • 举报
回复
老兄不会吧,学VC不入门,WIN32汇编却没问题??

我学了一段VC了,基本会使了


但WIN32汇编看了点,一点都没有头绪啊.
明天去抢劫 2003-01-03
  • 打赏
  • 举报
回复
你累不累啊
farfh 2003-01-03
  • 打赏
  • 举报
回复
汇编,烦死了,哪儿有c来得方便啊,晕死,win32汇编还不是一样调用api,为了编译出来的那一点效率去浪费大量时间写一堆无聊枯燥的代码实在不划算(我的建议是干脆用全asm的,不调用api,慢慢画一个窗口出来,这样才酷毙了,哈哈)。学习windows消息模型,直接学c语言的sdk就行,而且简单明了,个人建议,如果更深层次了解,学驱动编写吧。
msadmin 2003-01-03
  • 打赏
  • 举报
回复
WIN32汇编
andy_jqh 2003-01-02
  • 打赏
  • 举报
回复
JoshuaLi(上述操作保证造成内存泄露)
你真是厉害阿 这么尖锐的问题都被你发现了、
厉害,请阁下去遍名字解释分类字典吧
msadmin 2003-01-02
  • 打赏
  • 举报
回复
up
rivershan 2003-01-02
  • 打赏
  • 举报
回复
用汇编写大程序纯粹是自己跟自己过不去~
写写关键代码还可以~
msadmin 2002-12-31
  • 打赏
  • 举报
回复
我就这个问题已经向罗云彬老师讨教了,
他给我回了封信,在这里我很感谢他对我的帮助
以下是他的原文:

你好!

我以前学习Windows编程的过程就和你的学习过程一模一样,感想也是如此,就是:自从学会了从汇编的角度去看系统以后,再学其他的语言似乎很简单,因为你可以感觉到这些语言的底层是怎么运行的。
实际上,我觉得很多人的误区在于一定要说什么语言是最好的,而除此之外的都是不好的,但事实上并不是如此,任何语言都有它的长处和短处,关键在于怎么去发挥长处而避免短处。比如用汇编写杀毒软件、驱动、小巧精悍的系统工具很方便,用PB去写数据库应用程序很不错,
而反过来就是自讨苦吃。就拿我自己来说,我除了用汇编,用ASP、Oracle也用得很多,也偶尔用用VC,我的原则是并不是我喜欢汇编、精通汇编就一定要什么都用汇编,而是用什么合适就用什么。

还有一点就是,当一个学了VB的人去学了VC后,会觉得VB是白学了,但学了Win32汇编以后,再学任何东西都不会觉得汇编是白学的!你说呢? :)
加载更多回复(68)
内容概要:本文围绕基于物理场的动态模式分解(piDMD)展开研究,重点探讨其在流体力学、热传导及多物理耦合系统中的建模与应用。通过Matlab代码实现,将传统的动态模式分解(DMD)方法与物理场控制方程相结合,引入物理约束以增强数据驱动模型的物理一致性,从而提升对复杂非线性系统的模态提取精度与长期预测能力。文章系统阐述了piDMD的理论基础、数学推导过程与算法实现步骤,并结合典型物理场仿真案例(如Navier-Stokes方程驱动的流场演化)进行验证,展示了其在降阶建模、主导模态识别和时空动态可视化方面的优越性能,适用于高维、强耦合、非平稳系统的分析与优化。; 适合人群:具备一定数值计算、流体力学、控制理论或数据驱动建模背景,熟悉Matlab编程与线性代数运算,从事科学研究、工程仿真或系统辨识工作的研究生、科研人员及工程师。; 使用场景及目标:①实现对流场、温度场等物理场的高效降阶建模与动态行为预测;②提取符合物理规律的关键模态,用于系统稳定性分析与控制设计;③支撑复杂系统的状态估计、异常检测与优化调控等下游任务。; 阅读建议:建议读者结合提供的Matlab代码逐行调试与运行,深入理解piDMD算法中物理约束的嵌入方式及其对模态质量的影响,同时可尝试将其迁移至其他偏微分方程描述的物理系统中进行拓展验证与应用。
内容概要:本文研究了在峰谷分时电价引导下,基于多目标优化遗传算法NSGA-II的电动汽车充电负荷优化问题。通过构建以电网负荷波动最小化和用户充电成本最低为核心的多目标优化模型,利用NSGA-II算法求解获得帕累托最优解集,实现对大规模电动汽车充电行为的有序引导。文中系统阐述了峰谷电价激励机制的设计原理、电动汽车充电负荷的数学建模方法、多目标优化问题的形式化表达以及NSGA-II算法的具体实现流程,并借助Matlab平台进行仿真验证,结果表明该策略能有效平抑电网负荷峰谷差、降低用户充电支出并提升电力系统的运行效率与稳定性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事智能电网、电动汽车调度、需求侧管理等相关领域的研究生或科研人员。; 使用场景及目标:①研究峰谷电价政策对电动汽车充电行为的影响机制;②掌握NSGA-II算法在电力系统多目标优化中的具体应用;③实现电动汽车集群的有序充电调度以改善电网负荷曲线; 阅读建议:此资源结合了电力经济学与智能优化算法,建议读者在学习过程中重点关注模型构建与算法实现的衔接部分,动手复现仿真代码以深入理解参数设置与结果分析过程。
详情可查看下方数据集可视化效果。 【数据集概况】 · 检测类别(中文):[电梯(elevator)] · 训练集:1468 张 · 验证集:157 张 · 测试集:158 张 · 总计:1783 张 该数据集聚焦于各类建筑内部及外部环境中的电梯目标检测任务,涵盖住宅楼、办公楼、商场、酒店等多种典型场景下的电梯结构。图像采集覆盖不同光照条件、材质类型与安装位置,充分体现了实际应用中电梯的多样性与复杂性,为智能楼宇管理、安防监控及无障碍设施识别等方向提供了高质量的视觉基础支持。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 72 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9446** mAP50-95 | 0.6531 Precision | 0.9305 Recall | 0.8777 train/box_loss | 0.5807 train/cls_loss | 0.3505 val/box_loss | 1.0020 val/cls_loss | 0.6208 【训练过程分析】 72 轮训练后 mAP50 达到 0.9446,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。但 mAP50-95 为 0.6531,和 mAP50 差距 0.29,定位精度仍有优化空间。 【模型性能评估】 Precision 0.9305、Recall 0.8777,精度高于召回,存在一定漏检。 【预测效果展示】 验证集预测效果较好,检测框基本准确覆盖电梯,置信度整体偏高。 【改进建议】 1. 丰富场景...

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧