本页内容随时更换,欢迎提出建议及问题!

 
返回主页

软件编程

Win95环境下I/O端口的读写方法

1. 用VC++ 6.0编程
      在VC++ 6.0的C运行库中仍然提供了端口读写函数:_inp(),_inpw( ),_outp(),_outw()等(在系统提供conio.h中)。
   用户在应用程序中加入头文件说明 #include "conio,h",既可使用上述函数。

2. 动态链接库的编制方法
    步骤1. 用VC++ AppWizard创建Win32 Dynamic-Link Library工程项目MyDll

   步骤2. 在VC++开发环境中可以看到DLL的项目文件。
   DLL框架完成后,AppWizard将自动生成项目文件,但与MFC不同的是,它可以选择生成或不生成初始代码,
   其他代码由用户自行键入。

   编制DLL需要的文件
    *.h函数声明头文件
    *.c函数源文件
    *.def DLL输出函数文件(形成 * . lib文件)
    *.h文件的作用是声明DLL要实现的函数原型,供DLL编译使用,用户的应用程序使用DLL时必需包含其头文件。
    *.c文件实现函数具体功能的源文件,它有一个入口点函数,在DLL初次被调入时运行,做一些初始化的工作。一般情况下,
      用户无需做什么初始化工作,只需保留入口点函数框架即可。
    *.def文件是DLL工程项目中比较特殊的文件,它用来定义该DLL将输出那些函数供用户程序使用,
      只有输出的函数才能被用户程序调用。
    输出函数亦可在头文件声明,此方式不用def文件。

    步骤3. 编写新文件MyDll.h
    // MyDll.h
       extern "C"
       {
           _declspec(dllexport) APIENTRY int /*函数类型*/ MyFun()
            .
            .
       }
    说明:
       在函数声明文件中,extern "C"不可少,以使编译器在调用该函数时,将以C语言的语法格式去查找该函数。
    _declspec(dllexport)作用:输出函数声明。若工程项目中使用了*.def文件可不用_declspec(dllexport)
    输出函数声明;输出的函数名列在def文件的EXPORTS关键字下面。

    def文件的编制方法:
        //MyDll.def
        LIBRARY MyDll
        CODE PRELOAD MOVEABLE
        DATA PRELOAD SINGLE
        EXPORTS MyFun @1
                .     @2
               .     @3
    注: 1. 声明时不必带参数;
           2. 注释符号为“;”。
     步骤4. 向工程项目中加入新文件MyDll.c并向其中加入以下代码:
        //MyDll.c
        #include "windows.h" //包含必要的头文件
        #include "conio.h"
        #include "MyDll.h"
        BOOL APIENTRY DllMain( HANDLE hModule,
                               DWORD ul_reason_for_call,
                              LPVOID lpReserved
                              )
        {
            return TRUE;
        }
    /***************************************************************************
       FUNCTION: _WEP(int)
        PURPOSE: Performs cleanup tasks when the DLL is unloaded. WEP() is
                called automatically by Windows when the DLL is unloaded (no
                remaining tasks still have the DLL loaded). It is strongly
                recommended that a DLL have a WEP() function, even if it does
                nothing but returns success (1), as in this example.
    ****************************************************************************/
    int APIENTRY _WEP (int bSystemExit)
    {
        return(0);
    }
    //***************************************************************************
    // MyFunction
    //
        int APIENTRY MyFun()
        {
            用户代码
        }
  编译后,产生MyDll.lib和MyDll.exp中间文件,链接时产生MyDll.dll动态链接库

    3. 应用DLL
     用户所使用DLL必须在系统可找到的路径下,一般将DLL拷贝到系统目录 \win95\system下。

返回主页

公司简介

合作伙伴

产品介绍

软件下载

资料下载

订购商品

工程实例