Windows NT操作系统上的32位SQL Server 应用Word下载.docx

上传人:b****2 文档编号:1446986 上传时间:2023-04-30 格式:DOCX 页数:20 大小:25.48KB
下载 相关 举报
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第1页
第1页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第2页
第2页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第3页
第3页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第4页
第4页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第5页
第5页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第6页
第6页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第7页
第7页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第8页
第8页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第9页
第9页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第10页
第10页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第11页
第11页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第12页
第12页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第13页
第13页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第14页
第14页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第15页
第15页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第16页
第16页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第17页
第17页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第18页
第18页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第19页
第19页 / 共20页
Windows NT操作系统上的32位SQL Server 应用Word下载.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Windows NT操作系统上的32位SQL Server 应用Word下载.docx

《Windows NT操作系统上的32位SQL Server 应用Word下载.docx》由会员分享,可在线阅读,更多相关《Windows NT操作系统上的32位SQL Server 应用Word下载.docx(20页珍藏版)》请在冰点文库上搜索。

Windows NT操作系统上的32位SQL Server 应用Word下载.docx

ConvertingOS/2ApplicationstoWindows

建立基于Win32的DB-Library应用程序

下面的章节描述了有关使用Microsoft&

Win32&

应用程序编程接口(API,ApplicationProgrammingInterface)建立DB-Library&

应用程序的应用。

Win32DB-Library体系结构

在内部机制上,Win32的DB-Library动态链接库(DLL,dynamic-linklibrary)与OS/2&

上的实现方式类似。

与在OS/2的一样,在Win32中一个独立的操作系统线程(thread)处理每次DB-Library所发出的与SQLServer的联接。

通过调用一个进程(process)所装入的每个DB-LibraryDLL实例(instance)在共享代码的同时得到了一个私有数据区。

Win32DB-Library体系结构与在MicrosoftWindows&

3.x中的实现方式不同。

在Windows3.x中,DB-LibraryDLL只有一个被所有调用的进程共享的数据段。

W3DBLIB.DLL通过对单一数据段的联接的一个链接式列表维护DB-Library联接。

这种体系结构是需要的,因为在Windows3.x动态链接库只有一个被所有调用进程共享的数据段。

这样就必须通过调用dbinit和dbwinexit函数初始化和清除DB-LibraryDLL数据结构。

Win32的DB-Library函数包含于NTWDBLIB.DLL中,而命名管道(namedpipe)驱动程序包含在DBNMPNTW.DLL中。

应设置PATH环境变量包含这些动态链接库所在的目录。

另一个文件,NTWDBLIB.LIB,包含了你的应用程序使用Win32API的引入(import)定义。

应设置LIB环境变量包含NTWDBLIB.LIB所在的目录。

包含文件

sToolkitforWindowsNT&

提供了下列包含文件:

内容

SQLFRONT.H

错误代码和严重级(severitylevels),混合定义(miscellaneousdefinitions),和类型定义。

SQLDB.H

所有DB-Library函数的函数原型

你可以在INCLUDE环境变量中添加路径,包含这些包含文件所在的目录。

或者你也可以使用/I编译行开关指向包含文件所在的目录。

因为你的使用Win32API的应用程序必须包含SQLDB.H文件,所以你不需要定义所使用的DB-Library函数。

这些函数和它们的正确定义已包含在该包含文件中。

你必须在包含DB-Library包含文件之前定义一个应用程序的操作系统。

在所有使用Win32API设计的DB-Library应用程序的开头包含下列语句;

#defineDBNTWIN32

#include<

sqlfront.h>

sqldb.h>

你还能通过使用/D编译行参数定义操作系统(例如,使用/DDBNTWIN32而不是通过一个#define定义)。

编译和链接

下面的例程显示了一个简单的build文件。

该文件使用NMAKE工具编译和链接可调试的使用Win32API的DB-Library应用程序:

NTLIB=\nt\sdk\lib\i386

DBLIB=\sql\dblib\lib

guilibs=$(NTLIB)\gdi32.lib$(NTLIB)\user32.lib$(NTLIB)\

userrtl.lib$(NTLIB)\kernel32.lib$(NTLIB)\ntdll.lib\

$(NTLIB)\libcmt.lib

all:

sqltestw.exe

#Updatetheobjectfileifnecessary.

sqltestw.obj:

sqltestw.csqltestw.hsqltestw.rcmakefile

cl386-c-G3d-Di386=1-DWIN32sqltest.c

#Updatetheresourcefileifnecessary.

sqltestw.res:

sqltestw.rcsqltestw.hdilaogs.hdialogs.dlgmakefile

rc-r-fosqltestw.tmpsqltest.rc

cvtres-i386sqltestw.tmp-Osqltestw.res

delsqltestw.tmp

#Updatetheexefileifnecessary.

sqltestw.exe:

sql.objsqltestw.objsqltestw.resmakefile

link-machine:

i386-subsystem:

windows-out:

sqltestw.exe\

-entry:

WinMainCRTStartup\

sqltestw.ressqltestw.obj$(guilibs)\

($DBLIB)\ntwdblib.lib

将基于Windows3.x的DB-Library应用程序转换到Win32环境

所有的DB-Library函数都完全能够在平台间转换。

你不需要更改你的任何DB-Library调用。

你仅仅需要在编译时定义应用程序的操作系统(例如,对于WindowsNT为#defineDBNTWIN32)。

因为Win32API保持了与Windows3.x操作系统的兼容性,所以Win32DB-LibraryDLL支持所有基于Windows3.x的DB-Library函数,即使这些函数不需要也是如此。

在Windows3.x出现而在WindowsNT中并不需要的DB-Library函数(例如,DBLOCKLIB和DBUNLOCKLIB)可以被使用,但不执行任何操作。

两个DB-Library函数,dbprhead和dbprrow,由于发送输出到STDIO而在Windows3.x并不被支持,但在Win32中它们能够被支持并用于开发CONSOLE子系统应用程序。

dbprhead和dbprrow函数提供了一种简便的方式将查询结果显示到默认输出设备。

如果你希望使已有的基于Windows的DB-Library应用程序能够在WindowsNT上运行,你可以采取三种方法:

将你的16位Windows3.x应用程序不加改变的运行于Windows3.x子系统.如果你已有Windows3.x应用程序,你完全不必甚至将来也不需要进行改动,只需要不加改变的运行即可。

更改你的应用程序源代码以便其能被编译用于Win32API或Windows3.x.如果你的DB-Library应用程序正在开发或正在改进以满足不断改变的用户需要,以及你希望在Windows3.x和WindowsNT上运行应用程序,从相同的源代码略微进行改动以建立你的16位(Windows3.x)版本和32位(Win32)版本的应用程序。

将你的应用程序源代码完全转换到Win32.如果你决定更改你的应用程序只作为32位(基于Win32)应用程序运行(例如,你需要诸如线程和抢先多任务(preemptivemultitasking)等Win32特性),你可以将你的应用程序转换到Win32API上,并删除冗余的Windows3.x调用和依赖。

在保持DB-Library对Windows3.x兼容基础上进行转换

本章节解释了如何将用于Windows3.x的DB-Library应用程序转换到WindowsNT操作系统,而同时保持与Windows3.x应用程序的兼容性。

用于Windows3.x和C运行时态的API调用

一般而言,你可以改变你的代码轻而易举地建立16位或32位版的应用程序。

对于更深入的讨论编写使用Win32API的且保留了与Windows3.x兼容性的应用程序,请参阅MicrosoftWin32APIProgrammer'

sReference第1卷

下面是使用Win32API的应用程序开发指导方针:

函数定义与原型.确保你的函数定义和函数原型使用了可转换的数据类型。

Windows消息参数封装.处理扩宽到32位意味着处理的封装、其它wParam和lParam中的值已经改变。

检验你是否需要改变你的应用程序中的wParam和lParam编码。

DB-Library函数和数据类型

所有的DB-Library函数都完全能在操作系统间转换。

你只需要在编译的时候定义目标操作系统即可。

许多DB-Library函数的返回值为int型。

要注意int数据类型在Windows3.x中是16位值而在Win32API中则是32位值。

因此,对你的应用程序进行检查以使用正确的变量类型接收返回int数据类型的DB-Library函数所返回的值。

例如,一个定义为short数据类型的变量在Windows3.x中可以从DB-Library接收到正确的int值而在Win32API中则接收到错误的值。

除了检验接收DB-Library的返回值的变量类型是正确的以外,不需要对DB-Library函数做任何改动。

转换的其它考虑

如果你要将Windows3.x操作系统的一个应用程序转换到WindowsNT操作系统上而不需要保持与Windows3.x的兼容性,你可以改变你的DB-Library代码,删除冗余或不必要的Windows3.x函数。

冗余的Windows3.x专用DB-Library函数

下面的Windows3.x专用的DB-Library函数在Win32版本的DB-Library是冗余的:

dbinit

在Win32API中,不需要在引用其它DB-Library函数之前调用dbinit函数。

与在MS-DOS&

和OS/2&

操作系统中的相同,对dbinit的Win32调用返回一个版本字符串。

在Windows3.x中,必须调用dbinit函数初始化DB-Library数据结构。

注意通常推荐通过调用dbinit来得到DB-Library的版本字符串,并使其可被用户查看(例如,在“About”对话框中)。

dbwinexit

该函数在Win32中不需要。

DBLOCKLIB/DBUNLOCKLIB

在Win32中,每个进程拥有唯一的线性虚拟地址空间,其允许的最大寻址空间为4GB存储器(低端内存的2GB可被用户使用)。

在效果上相当于所有的数据存在于一个大的段中,你可以不用关注段、长指针(farpointers)以及其它。

这样,你不必在访问指向DB-LibraryDLL数据的指针或向DB-LibraryDLL传输数据的指针之前调用DBLOCKLIB和DBUNLOCKLIB宏。

对错误/消息处理器的注册的更改

下面是对Win32的错误和消息处理器的注册的改动:

不必输出回调(callback)函数.你不需要在一个.DEF文件中输出DB-Library错误和消息处理器。

不必调用MakeProcInstance.你不需要调用MakeProcInstance来得到一个传递到dberrhandle和dbmsghandle的函数。

只需要调用dberrhandle和dbmsghandle,传递函数地址。

下面的例程显示了在Windows3.x和Win32中调用dberrhandle和dbmsghandle函数的不同方式:

对于Windows3.x:

//Definevariables

staticFARPROClpdbMsgHandler;

staticFARPROClpdbErrHandler;

//GetProcedureInstances

lpdbMsgHandler=MakeProcInstance((FARPROC)dbMsgHandler,hInst);

lpdbErrHandler=MakeProcInstance((FARPROC)dbErrHandler,hInst);

//Installtheinstancesintodblib

dbmsghandle(lpdbMessageHandler);

dberrhandle(lpdbErrorHandler);

对于Win32:

dbmsghandle(dbMessageHandler);

dberrhandle(dbErrorHandler);

抢先多任务(Win32)与协同多任务(Windows3.x)

在Windows3.x中,为了支持协同多任务环境下的同步处理,每个应用程序必须运行良好并按照正常间隔占用CPU。

因此,当在Windows操作系统中处理SQLServer查询时,你需要使用基于Windows的定时器或PeekMessage函数与DB-Library函数结合以实现同步处理(dbsqlsend,dbdataready,anddbsqlok)。

有关在Windows3.x中实现同步查询的详细信息,请参阅MicrosoftSQLServerProgrammer'

sReferenceforC(43页)。

在Win32API中对抢先多任务的支持简化了同步查询处理的实现过程。

抢先多任务作为WindowsNT固有的特性确保了无论其它应用程序的任何进程正在进行处理,另一个程序的进程总能得到CPU周期。

在单处理器环境中,同步处理通过使用Win32线程或使用支持与PostMessageWindows函数协作实现同步处理的DB-Library函数而实现。

有关同步处理的详细信息,请参阅本文后面的“在DB-Library应用程序中使用Win32API的特性”内容。

转换SQLTEST3示例应用程序

本章节使用DB-LibraryProgrammer'

sToolkit提供的示例应用程序SQLTEST3作为例子演示如何将一个DB-Library应用程序从Windows3.x转换到WindowsNT。

虽然使用的是一个简单的应用程序,但本例能够显示从Windows3.x操作系统转换应用程序到WindowsNT操作系统是多么的容易。

向Win32的最小转换(保持与Windows3.x的兼容性)

下面的过程显示了如何更改SQLTEST3示例程序以将其转换到Win32API而同时保持与Windows3.x的兼容性:

更改操作系统定义:

更改(Windows3.x):

#defineDBMSWIN

到(Win32):

改变SQLTEST3.H中的函数原型使其可转换:

longFARPASCALSqlTestWndProc(HWND,unsigned,WORD,LONG);

BOOLFARPASCALAboutSQL(HWND,unsigned,WORD,LONG);

BOOLFARPASCALSelectSQL(HWND,unsigned,WORD,LONG);

BOOLFARPASCALConnectSQL(HWND,unsigned,WORD,LONG);

intdbwinErrorHandler(DBPROCESS*,int,int,int,LPSTR,LPSTR);

intdbwinMessageHandler(DBPROCESS*,DBINT,DBSMALLINT,DBSMALLINT,LPSTR);

LONGAPIENTRYSqlTestWndProc(HWND,UINT,DWORD,LONG);

LONGAPIENTRYAboutSQL(HWND,UINT,DWORD,LONG);

LONGAPIENTRYSelectSQL(HWND,UINT,DWORD,LONG);

LONGAPIENTRYConnectSQL(HWND,UINT,DWORD,LONG);

intAPIdbwinErrorHandler(DBPROCESS*,int,int,int,LPSTR,LPSTR);

intAPIdbwinMessageHandler(DBPROCESS*DBINTDBSMALLINT,DBSMALLINT,LPSTR);

更改下面函数的参数和返回值以匹配在第2步中对函数原型所做的全部改动:

SqlTestWndProc

AboutSQL

SelectSQL

ConnectSQL

dbwinErrorHandler

dbwinMessageHandler

向Win32完全转换

下面的过程显示了如何更改SQLTEST3示例程序以将其转换到Win32API而同时不保持与Windows3.x的兼容性:

删除多余的DB-Library调用:

DBLOCKLIB或DBUNLOCKLIB(在三个位置)

改变错误/消息处理器注册:

staticFARPROClpdbwinMessageHandler;

staticFARPROClpdbwinErrorHandler;

...

lpdbwinMessageHandler=

MakeProcInstance((FARPROC)dbwinMessageHandler,hInst);

lpdbwinErrorHandler=

MakeProcInstance((FARPROC)dbwinErrorHandler,hInst);

dbmsghandle(lpdbwinMessageHandler);

dberrhandle(lpdbwinErrorHandler);

FreeProcInstance(lpdbwinMessageHandler)

FreeProcInstance(lpdbwinErrorHandler);

dbmsghandle(dbwinMessageHandler);

dberrhandle(dbwinErrorHandler);

改变DialogBox实例:

改变所有的DialogBox函数调用以传递函数地址而不是调用MakeProcInstance并传递该函数返回的指针。

删除.DEF文件(不是必须):

将基于OS/2的DB-Library应用程序转换到Win32

所有的DB-Library函数可以在OS/2和Win32APIs间完全的转换,你不需要对你的DB-Library调用进行任何改动。

如果你希望已有的基于OS/2的DB-Library应用程序能在WindowsNT操作系统运行,有两种基本方法可以使用;

更改源代码,将基于OS/2和/或PresentationManager&

的函数替换为等效的Win32API函数。

因为C运行时态(run-time)函数和DB-Library函数能够完全转换于OS/2和WindowsNT平台间,如果你决定转换一个基于OS/2的应用程序到WindowsNT平台,你只需要将基于OS/2和/或PresentationManager&

的调用替换为等效的Win32API调用。

ConvertingOS/2ApplicationstoWindows对该主题进行了详尽地讨论并概述了转移的考虑事项,并深入说明使用Win32API函数替换基于OS/2和PresentationManager的函数的过程。

Win32API提供了等效的,在某些情况下功能更多的函数替换OS/2函数。

不加改动地运行OS/2字符模式(character-mode)应用程序。

WindowsNT操作系统的初始版本提供了一个使用二进制兼容运行OS/2字符模式应用程序的OS/2子系统。

如果你拥有为OS/2编写的字符模式DB-Library应用程序,你不需要进行任何改动或重建该应用程序就可以在WindowsNT平台运行该程序。

查阅WindowsNT的文档可确定OS/2子系统支持的OS/2函数。

OS/2到Win32API的转换

如同前面提到的,将应用程序从

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2