精华内容
下载资源
问答
  • Windows程序设计与Windows核心编程(资源)

    千次阅读 多人点赞 2016-02-01 22:53:50
    Windows程序设计与Windows核心编程   1.Ready 《Windows程序设计》(百科) 《Windows核心编程》(百科) 2.Resource Windows程序设计 书籍参考(Charles Petzold-Windows程序设计第五版) 链接:...

    Windows程序设计与Windows核心编程

     

    1.Ready

    《Windows程序设计》(百科)
    《Windows核心编程》(百科)

    2.Resource

    Windows程序设计

    书籍参考(Charles Petzold-Windows程序设计第五版)
    链接:http://pan.baidu.com/s/1skkmVjJ
    密码: k444
    
    
     
    视频参考(小金鱼系列视屏教程-Windows程序设计)
    http://pan.baidu.com/share/home?uk=2452628773&view=share

    Windows核心编程

    Windows核心编程(第5版中文版)  以及source code
    
     
    链接: http://pan.baidu.com/s/1pLxk9U7
    密码: 9w5j
    
     
    链接: http://pan.baidu.com/s/1c2FhWMs
    密码: ia5y
    
     
    
     
    
     
    source code 如下:

     

    工作环境

    Windows7(X86)+ Visual Studio 2013 + MSDN离线版
    安装Visual Studio 2015及MSDN离线版 (如何安装?传送门)

     

     

    展开全文
  • windows程序设计的好视频教程

    千次阅读 2009-07-24 23:15:00
     杨老师的网站中的“C语言也能干大事”系列教程视频确实很不错,通过它,我终于找到了学习windows程序设计的门路。  为了给更多迷茫的学生或者爱好windows程序设计的爱好者们更多的帮助,下面把杨老师论坛的...

    一直都在学习windows编程。期间在网上也找了不少资料,发现一个网站做的很不错。

       在CSDN上面也有那个网站老大,就是杨老师,在CSDN的学生大本营中大家可以找的到。

       杨老师的网站中的“C语言也能干大事”系列教程视频确实很不错,通过它,我终于找到了学习windows程序设计的门路。

        为了给更多迷茫的学生或者爱好windows程序设计的爱好者们更多的帮助,下面把杨老师论坛的连接贴出来。大家不妨去看一下。保证你会收获很多。

       在此,对杨老师推出的视频教程表示感谢。

    下面是杨老师的网站链接。

    http://www.rupeng.com/forum/jian-616.html

     

    为了防止大家说那是什么病毒或者木马之类的连接,我贴一个截图上来。大家可以道杨老师的网站上面的C语言也能干大事这个板块找到。

     

     

     

    好了,最后祝所有爱好WINDOWS编程的同学都能够学有所成,加油吧。

    展开全文
  • vs2013下载安装教程 安装好后再安装程序开发人员的字典MSDN,VS2013的MSDN和经典的VC++6.0的安装方法略有不同,这里提供一种在线的安装方法 ①打开vs2013后,点击“帮助”菜单栏->"添加和移除帮助内容",来到如何所...

    本套教材将使用vs2013为开发工具,如果读者还不知如何下载安装vs2013可以到我之前写的文章上去查看

    vs2013下载安装教程

    安装好后再安装程序开发人员的字典MSDN,VS2013的MSDN和经典的VC++6.0的安装方法略有不同,这里提供一种在线的安装方法

    ①打开vs2013后,点击“帮助”菜单栏->"添加和移除帮助内容",来到如图所示的界面


    ②在需要安装的文件点添加,选择完后点击屏幕右下角的“更新”即可开始下载,下载文件存放的目录在这里使用默认的,如果读者需要可以改为其他地方。


    ③一般来说下载速度都比较慢,可以选择夜间后者网速比较快的时候下载。完成后再下图所示的红色框内输入内容就可查找相关的帮助信息



    下面以一个小程序来讲解如何使用vs2013来开发windows程序

    ①新建工程


    打开工程类型选择对话框


    选择Win32项目,并输入项目名和项目所在的位置,单击确定进入下一步,再单击“下一步”,来到如下界面

    (注:win32项目是对应于win16来说的,由于早期的处理器是16位的所以开发了一台API函数win16,用于开发windows1.0到windows3.1下的编程。随着硬件的发展,操作系统也跟着发展,从win95,win98到windows NT都使用了win32的API函数,这点大家做一下了解即可。)


    为了创建一个从无到有的过程,选中“空项目”复选框,完成即可完成项目的创建。

    ②为工程添加源文件


    在下面的对话框中选择cpp类型的文件,文件名可以随意取一个,最后点击“添加即可”


    我们所创建的文件以树状图的形式表示在主界面的右侧


    假如读者发现自己的布局被改过并且无法改回原来的样子,可以在菜单栏的“窗口”->"重置窗口布局"处修改。

    好,到此为止我们已经把工程的框架搭建出来了,下面就是编程实现的问题了。

    ③编程实现

    熟悉控制台程序下编程的读者都知道,一个应用程序有一个执行的入口点main函数,然后在windows程序下编程我们程序的入口点改为了WinMain。我们可以在MSDN中找到关于WinMain函数的介绍

    WinMain

    The WinMain function is called by the system as the initial entry point for a Win32-based application.

    int WINAPI WinMain(
      HINSTANCE hInstance,  // handle to current instance
      HINSTANCE hPrevInstance,  // handle to previous instance
      LPSTR lpCmdLine,      // pointer to command line
      int nCmdShow          // show state of window
    );
    
    (注:该文档在/ Platform SDK / User Interface Services / Windowing /Windows / Window Reference / Window Functions 中有说明。)

    第一个参数hInstance是指向当前程序实例的一个实例句柄,好比该实例的一个标识符。第二个参数hPrevInstance是指向前一个实例的句柄,在win16程序设计中程式通过检查hPrevInstance 参数就能够确定自身的其他执行实体是否正在运行,然后达到某一些目的,在win32程序设计中已经丢弃了这种做法,只需设置为NULL即可。第三个参数是用于执行程序的命令行,利用它可以在启动时将档案载入记忆体。第四个参数指出了程序最初显示的方式,可以满屏显示,最大化显示等等。


    windows程序顾名思义就是基于窗口的编程,学过操作系统的读者都知道,窗口的产生于显示是属于并不是操作系统独立完成的,而是属于应用程序的范畴。下面来了解一下windows的运行机制:


    窗口的运行过程如上图的左边,它很像我们实际生活中创办一个公司一样,这里做一下对比方便大家了解。

    在实际编程中注册窗口类我们用的函数是

    ATOM RegisterClassEx(
      CONST WNDCLASSEX *lpwcx  // address of structure with class data);
    

    输入的参数为WNDCLASSEX类型变量的地址,就像注册公司前需要填写各种表格一样,我们注册窗口前也要进行详细的设置。

    要设置的参数有

    参数名 说明
    cbSize 所要注册的窗口类的尺寸
    style 指定窗口样式,即水平尺寸改变时要重绘窗口或者垂直尺寸改变时要重绘窗口
    lpfnWndProc 指定窗口处理函数
    cbClsExtra 设定窗口类的额外字节伴随,设置为0即可
    cbWndExtra 设定窗口实例的额外字节伴随,设置为0即可
    hInstance 应用程序的实例句柄
    hIcon 应用程序的图标
    hIconSm 应用程序的小图标
    hbrBackground 应用程序背景画刷
    hCursor 设定光标进入窗口时的形状,可以自定义,也可以设置为NULL然后指定系统中形状
    lpszMenuName 应用程序菜单名
    lpszClassName 应用程序类名,可作为窗口类的标识

    创建窗口调用的函数是

    HWND CreateWindowEx(
      DWORD dwExStyle,      // extended window style
      LPCTSTR lpClassName,  // pointer to registered class name
      LPCTSTR lpWindowName, // pointer to window name
      DWORD dwStyle,        // window style
      int x,                // horizontal position of window
      int y,                // vertical position of window
      int nWidth,           // window width
      int nHeight,          // window height
      HWND hWndParent,      // handle to parent or owner window
      HMENU hMenu,          // handle to menu, or child-window identifier
      HINSTANCE hInstance,  // handle to application instance
      LPVOID lpParam        // pointer to window-creation data
    );
    

    其中第一个参数指定了窗口创建的扩展样式。第二个参数为已经注册窗口类的类名。第三个参数为窗口名。第四个参数为窗口创建的样式。第五到第八个参数指定窗口的位置,可以使用默认值CW_USEDEFAULT。第九个参数为父窗口句柄。第十个参数为菜单栏句柄。第十一个参数为应用程序实例句柄。第十二个参数为可以通过一个指针来传递窗口创建参数。

    窗口显示和更新使用的函数分别为:

    ::ShowWindow(hWnd,SW_SHOW);
    ::UpdateWindow(hWnd);

    对于消息循环,我们只需把下面的程序片烂熟与心即可

    	MSG	msg;
    	while (GetMessage(&msg, NULL, NULL, NULL))
    	{
    		::TranslateMessage(&msg);
    		::DispatchMessage(&msg);
    	}
    GetMessage用于从系统消息队列中取出消息,TranslateMessage用于翻译消息,DispatchMessage用于把消息传进窗口消息队列中。

    还用一个很重要的只是点,就是窗口过程处理函数,它的格式为

    LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

    WndProc为自定义的函数名,须和注册窗口类时使用的函数名一致。第一个参数为窗口句柄,表示消息从哪个窗口发出,第二个参数为具体的消息值,第三个和第四个参数为消息的附加参数。

    一般而言,我们为了处理消息时能根据不同的消息做出不同的响应,在窗口过程函数中通常采用一个switch case的函数结构。

    为了便于读者理解消息处理的过程,下图形象地展示了出来


    (引用于http://blog.csdn.net/sshhbb/article/details/6076156)

    好了,到此为止我们已经把win32的helloworld讲完了,下面是这个程序的代码:

    #include<Windows.h>
    #include"tchar.h"
    
    //消息处理函数
    LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	switch (uMsg)
    	{
    	case WM_CLOSE:
    		::DestroyWindow(hWnd);
    		break;
    	case WM_DESTROY:
    		::PostQuitMessage(0);
    		break;
    	}
    	return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
    
    int WINAPI _tWinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPTSTR lpCmdLine, IN int nShowCmd)
    {
    	const TCHAR* pszClassName = _T("ITWnd");
    	WNDCLASSEX wcex;
    	//wcex.cbClsExtra = 0;
    	wcex.cbSize = sizeof(WNDCLASSEX);
    	wcex.style = CS_HREDRAW | CS_VREDRAW;
    	wcex.lpfnWndProc = WndProc;
    	wcex.cbClsExtra = 0;
    	wcex.cbWndExtra = 0;
    	wcex.hInstance = hInstance;
    	wcex.hIcon = (HICON)::LoadIcon(NULL,IDI_QUESTION);
    	wcex.hIconSm = (HICON)::LoadIcon(NULL, IDI_QUESTION);
    	wcex.hbrBackground =(HBRUSH) GetStockObject(GRAY_BRUSH);
    	wcex.hCursor = (HCURSOR)::LoadCursor(NULL,IDC_ARROW);
    	wcex.lpszMenuName = NULL;
    	wcex.lpszClassName = pszClassName;
    	BOOL bRet=::RegisterClassEx(&wcex);
    	if (!bRet)
    	{
    		MessageBox(NULL,_T("註冊窗口類失敗"),_T("註冊窗口"),0);
    		return FALSE;
    	}
    
    	//非进队消息
    	HWND hWnd = CreateWindowEx(0,pszClassName,_T("IT學吧"),WS_VISIBLE|WS_OVERLAPPEDWINDOW,
    		CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,//位置
    		NULL/*父窗口*/,NULL/*菜單句柄*/,hInstance/*當前實例句柄*/,NULL);
    	if (NULL == hWnd)
    	{
    		MessageBox(NULL,_T("创建窗口失败"),_T("创建窗口"),0);
    		return FALSE;
    	}
    	::ShowWindow(hWnd,SW_SHOW);
    	::UpdateWindow(hWnd);
    
    	MSG	msg;
    	while (GetMessage(&msg, NULL, NULL, NULL))
    	{
    		::TranslateMessage(&msg);
    		::DispatchMessage(&msg);
    	}
    	return TRUE;
    }

    希望该篇文章对读者有一定的启发,好了我们下篇见~~


    展开全文
  • Windows程序设计应用开发

    千人学习 2018-03-15 20:24:22
    养具备Win32 API SDK级别对Windows平台程序编码能力,可以参与Windows应用工程类别的GUI程序开发,对算法策略有容错性表现;提升的、软件设计经验,初步具备面向对象软件设计思想,能针对性的应用事件驱动编程开发...
  • Windows 32位汇编语言程序设计教程 之动态链接库http://www.feiesoft.com/win32asm/win32asm-11-2.html第11章 动态链接库和钩子11.1 动态链接库(1)11.1.1 动态链接库的概念在DOS环境下编过程序的读者一定知道静态
    Windows 32位汇编语言程序设计教程 之动态链接库


    http://www.feiesoft.com/win32asm/win32asm-11-2.html


    第11章 动态链接库和钩子11.1 动态链接库(1)
    11.1.1 动态链接库的概念


    在DOS环境下编过程序的读者一定知道静态库的含义——程序员将实现各种功能的代码写成一个个子程序(函数),编译成


    obj文件后,将多个obj文件组合成一个lib文件,当程序中要用到这些函数的时候,只需要指定函数名称,编译器就可以从库


    中抽出对应的子程序代码插入到可执行文件中去,这样就可以不必一遍遍地重写相同的功能代码。这种链接方法就是静态链


    接,


    静态链接的缺点显而易见,如果有多个程序用到库中的同样函数,那么所有这些可执行文件中都会包含一份同样的代码,对


    于每个程序几乎必须使用的一些函数来说,如果硬盘上有一万个程序用到这个函数,那么就存在一万份相同的代码,这显然


    是很浪费空间的。静态链接的另外一个缺点是:如果某个函数因为发现有错或更新算法等种种原因需要升级版本时,必须把


    所有用到此函数的可执行文件都找回来重新编译一遍,遗漏的程序中存在的还是旧版本的代码。


    DOS操作系统是单任务的操作系统,每时每刻只能有一个程序在运行,所以使用静态链接浪费的空间仅表现在磁盘空间的浪费


    上;而Windows操作系统是多任务的,内存中会同时装入多个程序的代码,如果使用静态链接的话,意味着有多份相同的代码


    被装入内存,这种浪费代价将是更昂贵的。


    Windows的解决办法就是使用动态链接库,动态链接库从表面上看也是提供了一大堆通用的函数,也可以被多个程序使用,但


    它和静态库的使用上有很多的不同点。


    静态库仅在编译的时候使用,编译完成后,可执行文件就可以脱离库文件单独使用了,而动态链接库中的代码在程序编译的


    时候并不会被插入到可执行文件中,在程序运行的时候才将整个库的代码调入内存,所以称为“动态链接”。如果有多个程


    序用到同一个动态链接库,Windows在物理内存中只保留一份库的代码,仅通过分页机制将这份代码映射到不同进程的地址空


    间中,这样不管有多少程序在使用一个库,库代码实际占用的物理内存永远只有一份。当然,这时候库使用的数据段还是会


    被映射到不同的物理内存中,多少个程序在使用动态链接库就会有多少份数据段。DLL的工作方式在图1.6中就已经有所演示


    了。


    当应用程序装载动态链接库的时候,程序中仅包括库的名称和函数的名称,这些信息是动态寻找对应函数所必须的,程序在


    编译和链接的时候必须插入这些定位信息,定位信息取自导入库文件,这一点在前面的编程中已经多次涉及。


    动态链接库的缩写为DLL,大部分动态链接库是以扩展名为dll的文件形式存在的,但并不是只有dll扩展名的文件才是动态链


    接库,系统中的某些exe文件、字体文件(*.fon)、一些驱动程序(*.drv)、各种控件(*.ocx)和输入法模块(*.ime)等


    都是动态链接库。实际上,系统中大部分包含公用代码的模块——不管扩展名是什么——都有可能是动态链接库。


    一个文件是否是动态链接库取决于它的文件结构,动态链接库文件和可执行文件同样使用标准的PE文件格式,仅文件头中的


    属性位不同而已,所以exe文件的一些特征也存在于动态链接库中,比如在动态链接库中也可以定义并使用各种资源,可以导


    入并使用其他动态链接库中的函数等。


    有一个最重要的概念一定要牢记:动态链接库是被映射到其他应用程序的地址空间中执行的,它和应用程序可以看成是“一


    体”的,动态链接库可以使用应用程序的资源,它所拥有的资源也可以被应用程序使用,它的任何操作都是代表应用程序进


    行的,当动态链接库进行打开文件、分配内存和创建窗口等操作后,这些文件、内存和窗口都是为应用程序所拥有的。


    11.1.2 编写动态链接库


    与前面一些例子程序相比,写动态链接库程序应该算是很简单的,程序中并不需要用到新的函数,只是在程序的结构上和链


    接时的选项有些区别而已。让我们通过一个简单的例子来说明,例子代码在所附光盘的Chapter11\Dll\Dll目录中,包括汇编


    源文件Counter.asm和定义文件Counter.def。上一层子目录Chapter11\Dll中存放的是调用DLL的例子,其中的内容将在下一


    节中分析。


    Counter.asm的内容如下:


    .386


    .model flat, stdcall


    option casemap :none


    ;Include 文件定义


    include windows.inc


    include user32.inc


    includelib user32.lib


    include kernel32.inc


    includelib kernel32.lib


    .data?


    dwCount dd ?


    .code


    DllEntry proc _hInstance,_dwReason,_dwReserved


    mov eax,TRUE


    ret


    DllEntry    Endp


    _SetText proc _hWnd,_dwID,_dwCount


    invoke SetDlgItemInt,_hWnd,_dwID,_dwCount,TRUE


    ret


    _SetText endp    


    _IncCount proc _hWnd,_dwID


    inc    dwCount


    invoke _SetText,_hWnd,_dwID,dwCount


    mov eax,dwCount


    ret


    _IncCount endp


    _DecCount proc _hWnd,_dwID


    dec    dwCount


    invoke _SetText,_hWnd,_dwID,dwCount


    mov eax,dwCount


    ret


    _DecCount endp


    End    DllEntry


    程序很简单,既没有创建窗口的代码也没有创建对话框的代码,总之,程序没有任何和创建界面有关的代码,仅定义了4个子


    程序:DllEntry,_SetText,_IncCount和_DecCount。其中程序的入口点由最后一句End语句定义到了DllEntry处。而


    _SetText子程序被最后两个子程序调用,功能是将指定的数值显示到指定对话框的一个子窗口控件中。最后两个子程序的功


    能分别是对dwCount变量进行递增或递减的操作,并把操作结果显示在参数指定的对话框中的子窗口控件中。


    一眼看上去,程序比较莫名其妙——入口的代码什么都没有做,仅返回一个TRUE;也没有地方用到_IncCount和_DecCount函


    数,这是为什么呢?请记住,dll文件的设计不是供自己使用的,而是被映射到其他应用程序的地址空间中代表“宿主”程序


    执行的,这两个函数就是供其他程序使用的函数,实际上对于“宿主”程序来说,虽然这两个函数仅包含3行代码,但它们的


    级别和User32.dll中的CreateWindowEx与DefWindowProc等极其复杂的函数没有任何区别。


    1. 入口点和初始化代码


    与可执行文件一样,动态链接库需要一个入口点,动态链接库的入口点是一个函数,函数的名称并不重要,例子代码中的入


    口函数命名为“DllEntry”,读者也可以把它取名为其他任何合法的名字,但入口函数的格式是有规定的。


    库的入口函数对调用动态链接库的应用程序来说是不可见的,它仅供操作系统使用。Windows在库装载、卸载、进程中线程的


    创建和结束等时候调用入口函数,以便动态链接库可以采取相应的动作。在入口函数中可以通过参数来判别Windows的本次调


    用究竟是在哪种情况下发生的。入口函数的结构一般如下面所示:


    DllEntry proc hInstDLL,dwReason,dwReserved


    mov eax,dwReason


    .if eax == DLL_PROCESS_ATTACH


     ;保存hInstDll


     ;初始化库需要的各种资源


    .if 初始化成功


    mov eax,TRUE


    .else


    mov eax,FALSE


    .endif


    .elseif eax == DLL_THREAD_ATTACH


     ;释放库使用的资源


    .elseif eax == DLL_THREAD_DETACH


     ;为新的线程分配资源


    .elseif eax == DLL_PROCESS_DETACH


     ;为线程释放资源


    .endif


    ret


    DllEntry    Endp


    Windows会传给入口函数3个参数,dwReason参数的值表示本次调用的原因,它可能是下面的四种情况之一。


    当dwReason的值是DLL_PROCESS_ATTACH的时候,表示动态链接库刚被映射到某个进程的地址空间,程序可以在这里进行一些


    初始化的工作,并返回TRUE表示初始化成功,返回FALSE表示初始化出错,这样库的装入就会失败。这给了动态链接库一个机


    会来阻止自己被装入。比如库程序可以在这里申请并保留一些内存,如果申请失败的话就可以返回FALSE告诉Windows,库无


    法正常工作。


    当dwReason的值是DLL_PROCESS_DETACH的时候则相反,表示动态链接库将被卸载,库程序可以在这里进行一些资源的释放工


    作,如将初始化时申请的内存释放,将打开的文件关闭等。 以DLL_PROCESS_ATTACH和DLL_PROCESS_DETACH值进行的调用在库


    的生命周期中只可能出现一次。


    当dwReason的值是DLL_THREAD_ATTACH的时候,表示应用程序创建了一个新的线程。当某个线程正常终止的时候,dwReason的


    值是DLL_PROCESS_DETACH。如果应用程序不是以多线程方式工作的话,就不会有这两种原因的调用;反之,如果应用程序频


    繁地创建和结束线程,那么入口函数将不断被调用。


    hInstDll是动态链接库的模块实例句柄。当使用这个句柄来装入资源的时候,表示资源是定义在库文件中的,对于动态链接


    库来说,获取这个句柄的惟一途径就是保留入口函数的这个参数,如果在DLL_PROCESS_ATTACH时不将这个句柄保存下来的话


    ,运行时可能就没有其他方法可以获取了。dwReserved参数是系统保留的参数,可以不必理会。


    读者可能会问:不是可以通过GetModuleHandle(NULL)函数来获取模块实例句柄吗?是的,但是动态链接库是代表应用程序


    运行的,所以,如果在库中调用这个函数,得到的仍然是“宿主”程序的实例句柄,而不是库程序的实例句柄。


    在例子程序中,不需要初始化工作,所以仅返回一个TRUE,表示任何情况下,Windows都可以装入这个库文件。动态链接库有


    一种很“极端”的应用:纯资源库,这些库仅包含资源而没有任何的功能函数,如字体文件等,对于这些库来说,库中的全


    部代码仅是入口函数中用来返回TRUE的那几句,这是库能被正常装入所必须的代码。


    2. 导出函数


    与写普通的可执行文件相比,动态链接库的设计流程中多了一个文件,那就是定义文件 *.def,源代码目录中还包括一个


    Counter.def文件,它的内容是:


    EXPORTS _IncCount


    _DecCount


    文件内容总共只有两行:一个EXPORTS关键字加上两个库中函数的名称,这是用来告诉链接器这两个函数需要导出,也就是说


    这两个函数可以被其他程序调用。动态链接库的文件格式是PE格式,每个PE格式文件的文件头中都可以有一个导出表,只有


    导出表中列出的函数才可以被其他程序调用,链接器根据def文件的内容在导出表中加入由EXPORTS关键字指定的函数名。


    如果库文件中的函数没有在def文件中指定(如例子中的_SetText函数),那么这个函数就仅能被库文件中的代码调用,而无


    法在其他应用程序中使用,这是因为库文件的导出表中没有列出它的名称,这样其他程序根本不会知道它的存在。对于这些


    函数,可以把它们叫做私有函数。




    3. 链接选项


    为了生成动态链接库文件,在链接的时候必须使用合适的选项,来看看Counter库文件例子使用的Makefile文件:


    DLL = Counter


    ML_FLAG = /c /coff


    LINK_FLAG = /subsystem:windows /Dll


    $(DLL).dll: $(DLL).obj $(DLL).def


    Link $(LINK_FLAG) /Def:$(DLL).def $(DLL).obj


    .asm.obj:


    ml $(ML_FLAG) $<


    .rc.res:


    rc $<


    clean:


    del *.obj


    del *.exp


    del *.lib


    编译的时候,使用Ml.exe编译器的方法并没有什么不同,但是使用Link.exe链接程序的时候,必须使用/Dll和/Def选


    项,/Dll选项告诉链接器输出文件的格式是动态链接库,/Def:filename.def选项用来指定定义了导出函数名称的def文件名


    ,在这个例子中,库文件中没有包含资源,如果包含资源的话,链接时还可以指定资源文件名,一个完整的链接参数如下所


    示:


    Link /DLL /subsystem:windows /Def:filename.def filename.obj filename.res


    4. 生成库文件


    当使用Link.exe链接器完成链接工作后,链接器生成3个文件,它们分别以dll,lib和exp为扩展名。dll文件就是动态链接库


    ,而lib文件是供程序开发用的导入库。


    回想一下:当在汇编源程序中用到某个动态链接库中的函数时,在源文件的一开始就要用includelib语句指定动态链接库的


    导入库,这样链接的时候链接器才知道到哪个库中寻找指定的函数,如果开发的时候没有动态链接库的导入库文件,使用起


    来就比较麻烦了。


    为了在开发其他程序的时候使用自己编写的动态链接库,就必须提供这个动态链接库的导入库文件,Link.exe考虑了这一点


    ,所以在生成dll文件的同时也生成了导入库文件。如果dll文件是当做最终应用程序发布的,可以仅发布dll文件;如果是当


    做插件供其他人做二次开发用的,那么就要为其他程序员同时提供dll文件和lib文件,并且根据情况提供不同语言使用的头


    文件(最后,还要为每个导出函数写一个说明,包括参数的个数、类型和定义等)。目录中还有一个Counter.inc文件,它的


    内容如下:


    _IncCount  proto  :dword,:dword


    _DecCount  proto  :dword,:dword


    这是为了在汇编程序中使用Counter.dll库文件而书写的include文件。(这样读者就知道MASM32软件包中包含的lib文件和


    inc文件是怎么来的了!)


    exp文件是输出库文件,这是链接时的一个副产品,一般没有什么用途,我们可以直接将它删掉。
    ---------------------------------------
    展开全文
  • windows程序设计简介

    千次阅读 2014-09-14 10:50:30
    大家好,非常高兴和大家一起分享Windows开发的
  • 工欲善其事,必先利其器。 编写Windows程序当然还是用微软自己产的才好用。毕竟在很多方面别人在设计时就已经帮你考虑...但是在Windows程序设计上,他们并不是特别的出色。而且特别的麻烦。如果你愿意花一个星期只为...
  • VS2013打包Windows程序部署教程

    千次阅读 2018-04-07 17:32:57
    设置完上面的步骤后,我们的打包程序基本设置完成,但是在一些情况下我们往往要打包.NET环境或者其它程序运行所需要的Windows环境,InstallShield也为我们很好的设计了环境的打包。  在选择需要打包的环境时一定要...
  • 这本书确实是一本很不错的windows程序设计教程,刚好适合我这种中级水平的人。 (这里有下:http://download.csdn.net/detail/booksyhay/5778339) 虽然我之前已经“学会”了如何用MFC编程,甚至对windows的...
  • Windows API程序设计入门一、实验目的二、实验工具三、参考资料四、步骤五、代码分析六、运行效果七、补充 一、实验目的 ...我们老师推荐的3本参考书,《Windows程序设计》(charle petzold著)、《深入浅出M
  • Windows程序设计 VC++6.0开发环境熟悉

    千次阅读 2016-03-27 18:11:55
    熟悉Visual C++ 6.0开发环境,掌握VC6中建立、维护、运行工程项目的...熟悉Visual C++ 6.0开发环境,如AppWizard、ClassWizard、工具栏、编译、运行普通的C++应用程序等,并能编写一个简单C++应用程序。熟悉调试过程。
  • 最近在学习windows程序设计的创建窗口这方面的知识,有一些收获,现在将我所学到的内容记录下来,供大家参考。 本例将做一个类似txt文档窗口,可以对用户的键盘输入打印到该窗口上,并且有菜单栏可以单击菜单栏中的...
  • WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,一般使用 C# 编程。...这套 C# WinForm 教程将教会大家如何使用 WinForm 进行界面设计,并绑定对应的事件,开
  • 008_《Delphi6程序设计教程

    千次阅读 2010-11-19 18:22:00
    程序设计的基本操作(窗体和菜单的设计);设计程序的可视化组件;对程序代码的调试和异常处理;对数据库的操作及开发多媒体的操作等。 本书内容全面、语言流畅,可作为高等院校计算机相关专业的数据库课程教材,也...
  • 一、填空题 matrix laboratory;>>、函数;主页、绘图、应用程序;...答:与一般的windows程序一样,启动MATLAB系统有3种常见方法。 (1)在windows桌面,单击任务栏上的“开始”按钮,选择“所有程序”→“M
  • Windows窗口程序设计入门(C#版)

    千次阅读 2018-05-05 13:13:04
    这次用C#写个简单的窗口程序,这篇文章完全是面向新手的。我简单说明一下我们要实现的功能:有两个窗体Form1和Form2,这两个窗体里面都有一个TextBox和一个Button。①当单击Form1里面的Button时,加载出Form2,同时...
  • 经典windows sdk 程序设计网站

    千次阅读 2008-05-29 13:40:00
    经典windows sdk 程序设计网站 ——有好站就会更新,免得到处去找 http://www.winprog.org/tutorial/个人最喜欢的SDK入门教程 使用Chttp://www.relisoft.com/win32/index.htm较喜欢的,使用C++http://adrianxw.dk/ ...
  • C#编写Windows服务程序图文教程

    千次阅读 2014-05-28 15:47:13
    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的。所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Windows Service写很深入。 ...
  • 一、消息框 在之前的学习中,我们通过MessageBox创建了一个消息框程序! 消息框是什么,消息框就是我们用来跟用户交流的界面!! /* ---------------------...《Windows 程序设计(SDK)》视频教程 ----------------...
  • 小甲鱼windows程序设计(50讲)

    千次阅读 2018-06-21 08:18:16
    首先要多谢原创-小甲鱼老师,以下是网盘视频:链接:https://pan.baidu.com/s/1fHoPrE35Rd8e7wkrKFKt0A 密码:mtx1
  • 2~5 案例研究:井字棋游戏 第九章 面向对象的程序设计 第十章 模块和客户端 第十一章 算法与数据结构基础 第十二章 图形用户界面 案例研究:简易图形用户界面计算器 第十三章 图形绘制 图形绘制模块:tkinter 图形...
  • 《ASP.NET程序设计教程》之《前言》

    千次阅读 2008-12-18 17:41:00
    本文是乐知学堂金旭亮老师即将出版的新书《ASP.NET程序设计教程》之前言。本书配套课程可在乐知学堂网站学习。地址:http://xuetang.itcast.net/ 说明: ==================《ASP.NET程序设计...
  • 045_《Delphi程序设计教程(第二版)》

    千次阅读 2010-12-09 09:43:00
    本书是学习Delphi程序设计的基础教程,从基础人手,由浅入深,内容翔实、图文并茂。每章都附有精选例题,并细分为界面设计、属性设置、程序设计和关键分析,具有良好的可操作性。本书可作为大学计算机及其相关专业的...
  • Visual C++程序设计案例教程(张荣梅)  本书主要内容包括 Visual C++开发环境的初步实践,面向对象程序设计Windows编程基础,对话框 与控件,图形图像(绘图),菜单、工具栏和状态栏,数据库编程等。 对...
  • 044_《Delphi程序设计基础教程

    千次阅读 2010-12-09 09:16:00
    本书采用案例式教学的编写方法,详细讲述Delphi程序设计。本书内容丰富,包括Delphi基础知识、Object Pascal语言、编程基础(包含程序控制结构、枚举、子界与集合、数组与记录以及过程与函数)、界面设计(包含窗体与...
  • 《ASP.NET程序设计教程》之《前言》 说明:==================《ASP.NET程序设计教程》是我应高等教育出版社之约而编写的高校计算机及相关专业用教材,目前书稿已经全部完成并交给出版社进行编辑...
  • Windows环境下的C程序设计环境

    千次阅读 2009-07-23 09:35:00
    Windows环境下的C程序设计环境 Note: Return to tutorial view. MS Visual Studio 2005, GCC/GDB/MINGW, VIM/SciTE/PSPAD/使用配置初步教程
  • c# Windows窗体应用程序设计综合实例(一)匹配游戏设计 上次的计时器运行效果图如下: = ------------------------------------------------------------------------------ 今天来分享一个综合实例,设计一个匹配...
  • MATLAB程序设计教程(1)——MATLAB操作基础

    万次阅读 多人点赞 2007-08-13 20:18:00
    具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。 4 . MATLAB 工具箱 MATLAB 包含两部分内容:基本部分和各种可选的工具箱。 MATLAB 工具箱分为两大类:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,478
精华内容 28,591
关键字:

windows程序设计教程