如何学习VC开发WINDOWS程序讨论(二)

原创 2002年06月10日 09:37:00

我的朋友经过一晚的学习,继续和我讨论。

B:问你几个问题吧!

WinMain()函数的调用约定是PASCAL。什么是约定啊?不算很理解,PASCAL不是一种语言吗?和c有什么关系啊?

A:在这里PASCAL是一个调用约定,由于这种方式最早由PASCAL采用,所以这么叫。

在MSDN中的C++ Language Reference中,Calling Conventions这一章都是讲调用约定的。

约定:微软重定义了许多约定类型,为的是可以让代码更容易跨平台或者跨编译器。
其实,调用约定要解决两个问题,都是针对堆栈操作:
1。参数传递的顺序(本质是压栈的顺序)
2。谁负责平栈(调用者还是调用对象)
目前你只要搞清楚一个函数的声明、定义和实现中的调用方式必须一致!
(高手不要和我较汁,这是给新手看的,fastcall以后再说)

 

B:我在看你写的,我要慢慢琢磨啦,哈哈

“目前你只要搞清楚一个函数的声明、定义和实现中的调用方式必须一致!”我现在明白,你说的什么堆栈,压栈,平栈什么玩意不明白了:(


A:所以我说你只要搞清。。。
其他不着急

B:?

whie(GetMessage(&msg,Null,0,0))
{
    ...
}

是循环得到win98发给他的消息是吧?&msg这个引用是什么玩意?啊

A:msg是一个结构,内部包含消息的各种必要参数。GetMessage得到msg的地址以后,回填这些内容。

 

B:那    等于是给了一个msg这个结构的引用,哦

A:是的,不过对于c程序员来说,你看问题的角度最好调整一下。

所有的东西你要理解到底是什么!特别是各种指针和引用。

B:怎么调整呢?往哪个方向啊

A:也就是说你尽量搞明白任何东西最终在内存中是什么样的。
比如引用,就是传递了被引用对象的起始地址。

B:内存?还真不明白,我会好好看的。
引用也是地址吗?
指针不是地址吗?引用不就是一个复制的对象吗?


A:在c++中,引用就是传递该对象的起始地址,所有类型都可以引用。
在c++中,引用其实可以用取地址代替。
例如,我们要实现在函数中将变量加1:
//传递引用
void Inc(int &nValue)
{
 nValue++;
}
//传递指针
void Inc2(int* pValue)
{
 (*pValue)++;
}

//调用
int n = 0;
Inc(n);
Inc2(&n);

这两种方法效果是一样的,你要体会一下。其实在c++中,引用和取地址用的是同一个符号"&".

B:Inc的参数是引用类型啊,为什么不Inc(&n)啊?
Inc2的参数是指针,为什么不Inc2(*n);

B:Inc2(&n);我明白了

是把n用&取地址,也就是指针的了是吧?

Inc的使用不明白

A:

void Inc(int &nValue);
声明的是传递引用,所以直接把东西给函数就行了,编译器知道函数中使用的都是原来那个对象,所以你直接改那个对象,外面的值就变了。这其实是把取地址的问题交给编译器完成了。


void Inc2(int* pValue);
声明传递地址,那么你当然要取出地址传递过去。

B:现在有几个难明白的:

约定,宏,还有win怎么和别的程序基本的数据类型不一样?

A:约定我们讲过了

:直接找的宏的实现看看就可以了。
装一个VisualAssist,光标放在宏上面以后就可以看到宏的定义,还可以go过去。

B:知道了

 

A:

基本数据类型:这个是由语言决定的,微软不能随便改。
但是目前的c/c++标准中,各种数据类型的宽度是会随平台改变的,而没有定义绝对的数据类型,所以微软用宏定义扩展了许多绝对数据类型。

例如我们需要一个4字节宽度的绝对数据类型DWORD,那么在目前32位平台下,微软就typedef unsigned long DWORD,到了64位平台上可能就是typedef unsigned int DWORD
这样,只要换一份定义文件,所有源代码就可以直接移植。

B:懂的那么透彻了,明白了,真佩服你!!!

A:我要写程序去了,白白。

如何学习VC开发WINDOWS程序讨论(一)

    经常看到有很多朋友问关于vc编程学习的问题,我也回答过一些,今天我和一个朋友讨论了关于学习vc编程的问题,整理一下,对初学这或许有些帮助。A:deadhorse  B:朋友 A:说说你的实际情...
  • deadhorse
  • deadhorse
  • 2002年06月07日 09:25
  • 1178

如何学习VC开发WINDOWS程序讨论(三)

B:这2天在家看完了3章,看得还算轻松有一些函数调用的问题,比如:int MessageBox(  HWND hWnd,          // handle of owner window  LPC...
  • deadhorse
  • deadhorse
  • 2002年06月11日 15:06
  • 600

如何用VC6.0编写Windows Service程序

如何用VC6.0编写Windows Service程序 2005/10/11杨登峰(MSN:dengfengyang@hotmail.com)本人在项目开发要用到创建Service应用程序。但是网络好...
  • ydfok
  • ydfok
  • 2005年10月11日 21:46
  • 5005

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

一、Windows系统安装OpenSSL 1、  环境: 操作系统:Windows7(32位)64位没有测试,不保证本方法可以成功 VC:VC 6.0(其他VC环境也大同小异,只不过路径有所不同...
  • wowowoc
  • wowowoc
  • 2014年06月09日 23:55
  • 2592

浅谈如何学习VC++

预备知识:     1. VC是一门语言吗?     VC不是一种语言,而是一种集成开发环境(IDE)。利用VC,可以把源程序编写、编译链接、调试运行等各个工作放在一块完成,很方便。如果你学过 808...
  • liquanhai
  • liquanhai
  • 2010年04月18日 18:44
  • 10034

VC++ 2013 开发windows窗体程序

开发工具版本:Visual Studio Express 2013 for Windows Desktop 1. 新建Visual C++下面的“Win32 Project” 2. 项目属性中,在...
  • yinxing2008
  • yinxing2008
  • 2013年12月29日 22:34
  • 1130

windows编程经典书籍+VC++学习路线资料

本人是刚刚开始学习windows编程的,感觉看雪学院的大牛很NB.想找一些书籍来看学习学习,可是不知道看哪些书好. 驱动,对菜鸟们来说真是一个很深奥的话题,所以 ,我找来了这篇文章供大家分享,以后大...
  • fjxichao
  • fjxichao
  • 2014年07月29日 15:35
  • 1931

让你的程序可以执行脚本并和脚本实现交互

#ifndef _H_WTLVC6SCRIPT_H_ #define _H_WTLVC6SCRIPT_H_ #include #include //////////////////////...
  • i7thTool
  • i7thTool
  • 2016年12月16日 16:55
  • 486

VC开发Windows客户端软件之旅——前言

本系列博文将介绍Windows客户端开发过程中用到的各个模块和技术点。其中包括:界面、日志、崩溃收集和分析、网络、数据加密和加解压等。...
  • breaksoftware
  • breaksoftware
  • 2014年09月07日 18:32
  • 4053

微信小程序的讨论总结(周一贴)

用户体验好,用完即走,小而美微信小程序体验比h5号,比Native好。 虽然对于应用下载的流量的问题其实大家还是很纠结。但是基本能确定用户体验会比较好。1 用户到达路径短 , 相对Native ...
  • dayuqi
  • dayuqi
  • 2016年11月23日 18:27
  • 514
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何学习VC开发WINDOWS程序讨论(二)
举报原因:
原因补充:

(最多只允许输入30个字)