当前位置:主页   - 电脑 - 程序设计 - VB
API入门系列之四 -一个相当简单的SDK程序
来源:网络   作者:   更新时间:2011-02-12
收藏此页】    【字号    】    【打印】    【关闭

  大家好,还是我beyondcode,再次见面,前面介绍的那么多'理论知识',你们都懂了吗? 就算还没有彻底领悟,但至少还是有那么一点意识了吧,知道有那么一回事了吧。这一篇我打算通过一个小小小例子,来回忆一下我们以前介绍的相关知识,如Windows的数据类型,特别是和字符和字符串操作相关的数据类型,还有就是Unicode和ASCII在API函数上的具体体现。

  另外,SDK编程交流群已经建立,很多朋友踊跃参加,系列文章和群的发展离不开你们。群号:81543028。

  Ok,我们正式开始,我打算从一个简单的SDK程序开始,别怕,就几行代码而已··

/* BY beyondcode */

#include <windows.h>


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)

{

MessageBoxA( NULL, "Hello beyondcode", "Title", MB_OK );

return 0;

}

  程序你已经看到了,这恐怕就是一个最简单的带窗口的SDK程序了吧,如果你能写出代码行数比这个还少,又带窗口显示字符串的SDK程序,欢迎交流,呵呵,开个玩笑。

  程序倒是简单,可是我还是要问一问,这个程序,你通过观察我在字符串的处理,还是在API函数的调用,还是主函数的参数写法,你能看出什么问题呢?.....................................对,就是我全部明确指出是单字节版本的,WinMain的第三个参数是LPTSTR类型,调用的MessageBox是带A后缀的单字节版本,字符串常量"Hello beyondcode"和"Title"都没有使用L前缀。那么第二个问题来了, 如果我告诉你我现在的工程环境是 使用Unicode字符集 (工程使用的字符集可以在 【项目】->工程属性 弹出的属性页中的 【配置属性】中的【常规】左边的【字符集】中设置),那么我上面的程序能正常通过编译吗? 当然能,因为我已经试过了,不信你也可以试试,可是为什么呢? 这是因为我指定的参数和函数需要的参数都是单字节版本的,也就是说他们相互匹配。要是我这里将MessageBoxA改成MessageBoxW呢? 就会出错吧,因为MessageBoxW的第二个,和第三个参数是需要LPCWSTR,通过上一篇学习,我们知道也就是const wchar_t*, 而我给出的两个字符串常量却没有用L前缀.也就是说他们是单字节的,传给宽字节版本的MessageBoxW当然就类型不匹配了啊,所以就通不过编译了吧。

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明