怎么给自己的程序提供接口(API)给别的程序 *** 作(api接口怎么用例子)

怎么给自己的程序提供接口(API)给别的程序 *** 作(api接口怎么用例子),第1张

API(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。API除了有应用“应用程序接口”的意思外,还特指API的说明文档,也称为帮助文档。另外,也是美国石油协会、空气污染指数、医药、空中位置指示器的英文简称。

WindowsAPI是一套用来控制Windows的各个部件(从桌面的外观到为一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么这在某种程度上很象Windows的天然代码其他的语言只是提供一种能自动而且更容易的访问API的方法VB在这方面作了很多工作它完全隐藏了API并且提供了在Windows环境下编程的一种完全不同的方法这也就是说,你用VB写出的每行代码都会被VB转换为API函数传递给Windows例如,Form1PrintVB将会以一定的参数(你的代码中提供的,或是默认参数)调用TextOut这个API函数。同样,当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体(这对于你来说是隐藏的),VB获取这个调用并经过分析后生成一个特定事件(Button_Click)API函数包含在Windows系统目录下的动态连接库文件中(如User32dll,GDI32dll,Shell32dll)更易理解地说:Windows这个多作业系统除了协调应用程式的执行、分配内存、管理系统资源之外,她同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备等目的,由於这些函数服务的对象是应用程式(Application),所以便称之为ApplicationProgrammingInterface,简称API函数。WIN32API也就是32位平台的应用程序编程接口。凡是在Windows工作环境底下执行的应用程式,都可以调用WindowsAPI。

API分为四种类型

远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。标准查询语言(SQL):是标准的访问数据的查询语言,通过通用数据库实现应用程序间的数据共享。文件传输:文件传输通过发送格式化文件实现应用程序间数据共享。信息交付:指松耦合或紧耦合应用程序间的小型格式化信息,通过程序间的直接通信实现数据共享。当前应用于API的标准包括ANSI标准SQLAPI。另外还有一些应用于其它类型的标准尚在制定之中。API可以应用于所有计算机平台和 *** 作系统。这些API以不同的格式连接数据(如共享数据缓存器、数据库结构、文件框架)。每种数据格式要求以不同的数据命令和参数实现正确的数据通信,但同时也会产生不同类型的错误。因此,除了具备执行数据共享任务所需的知识以外,这些类型的API还必须解决很多网络参数问题和可能的差错条件,即每个应用程序都必须清楚自身是否有强大的性能支持程序间通信。相反由于这种API只处理一种信息格式,所以该情形下的信息交付API只提供较小的命令、网络参数以及差错条件子集。正因为如此,交付API方式大大降低了系统复杂性,所以当应用程序需要通过多个平台实现数据共享时,采用信息交付API类型是比较理想的选择。

数据的连接首先需要加载一个代码块。如果 chunk 是一个字符串,代码块指这个字符串。 如果 chunk 是一个函数, load 不断地调用它获取代码块的片断。 每次对 chunk 的调用都必须返回一个字符串紧紧连接在上次调用的返回串之后。 当返回空串、nil、或是不返回值时,都表示代码块结束。

如果没有语法错误, 则以函数形式返回编译好的代码块; 否则,返回 nil 加上错误消息。

如果结果函数有上值, env 被设为第一个上值。 若不提供此参数,将全局环境替代它。 所有其它上值初始化为 nil。 (当你加载主代码块时候,结果函数一定有且仅有一个上值 _ENV ))。 然而,如果你加载一个用函数(参见 stringdump, 结果函数可以有任意数量的上值) 创建出来的二进制代码块时,所有的上值都是新创建出来的。 也就是说它们不会和别的任何函数共享。

接下来就是根据以上信息进行下面的 *** 作,chunkname 在错误消息和调试消息中,用于代码块的名字。 如果不提供此参数,它默认为字符串chunk 。 chunk 不是字符串时,则为 "=(load)" 。

字符串 mode 用于控制代码块是文本还是二进制(即预编译代码块)。 它可以是字符串 "b" (只能是二进制代码块), "t" (只能是文本代码块), 或 "bt" (可以是二进制也可以是文本)。 默认值为 "bt"。

Lua 不会对二进制代码块做健壮性检查。 恶意构造一个二进制块有可能把解释器弄崩溃。

运行程序来遍历表中的所有域。 第一个参数是要遍历的表,第二个参数是表中的某个键。 next 返回该键的下一个键及其关联的值。 如果用 nil 作为第二个参数调用 next 将返回初始键及其关联值。 当以最后一个键去调用,或是以 nil 调用一张空表时, next 返回 nil。 如果不提供第二个参数,将认为它就是 nil。 特别指出,你可以用 next(t) 来判断一张表是否是空的。

索引在遍历过程中的次序无定义, 即使是数字索引也是这样。 (如果想按数字次序遍历表,可以使用数字形式的 for 。)

当在遍历过程中你给表中并不存在的域赋值, next 的行为是未定义的。 然而你可以去修改那些已存在的域。 特别指出,你可以清除一些已存在的域。

如果 t 有元方法 __pairs, 以 t 为参数调用它,并返回其返回的前三个值。

否则,返回三个值:next 函数, 表 t,以及 nil。 因此以下代码

能迭代表 t 中的所有键值对。

参见函数 next 中关于迭代过程中修改表的风险。

pcall (f [, arg1, ···])

传入参数,以 保护模式 调用函数 f 。 这意味着 f 中的任何错误不会抛出; 取而代之的是,pcall 会将错误捕获到,并返回一个状态码。 第一个返回值是状态码(一个布尔量), 当没有错误时,其为真。 此时,pcall 同样会在状态码后返回所有调用的结果。 在有错误时,pcall 返回 false 加错误消息。

API(Advanced Programmers Interface,高级程序员接口)(注:API实际是指Application Programming Interface,应用程序编程接口;此处疑为原文错误,不过在VB中也可以这么说吧!)是一套用来控制Windows的各个部件(从桌面的外观到位一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数用户的每个动作都会引发一个或几个函数的运行以Windows告诉发生了什么

这在某种程度上很象Windows的天然代码其他的语言只是提供一种能自动而且更容易的访问API的方法VB在这方面作了很多工作它完全隐藏了API并且提供了在Windows环境下编程的一种完全不同的方法

这也就是说,你用VB写出的每行代码都会被VB转换为API函数传递给Windows例如,Form1PrintVB 将会以一定的参数(你的代码中提供的,或是默认参数)调用TextOut 这个API函数

同样,当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体(这对于你来说是隐藏的),VB获取这个调用并经过分析后生成一个特定事件(Button_Click)

API函数包含在Windows系统目录下的动态连接库文件中(如User32dll,GDI32dll,Shell32dll)

API 声明

正如在"什么是API"中所说,API函数包含在位于系统目录下的DLL文件中你可以自己输入API函数的声明,但VB提供了一种更简单的方法,即使用API Text Viewer

要想在你的工程中声明API函数,只需运行API Text Viewer,打开Win32apitxt(或MDB如果你已经把它转换成了数据库的话,这样可以加快速度注:微软的这个文件有很多的不足,你可以试一下本站提供下载的api32txt),选择"声明",找到所需函数,点击"添加(Add)"并"复制(Copy)",然后粘贴(Paste)到你的工程里使用预定义的常量和类型也是同样的方法

你将会遇到一些问题:

假设你想在你的窗体模块中声明一个函数粘贴然后运行,VB会告诉你:编译错误Declare 语句不允许作为类或对象模块中的 Public 成员看起来很糟糕,其实你需要做的只是在声明前面添加一个Private(如 Private Declare Function)--不要忘了,可是这将使该函数只在该窗体模块可用

在有些情况下,你会得到"不明确的名称"这样的提示,这是因为函数常量或其他的什么东西共用了一个名称由于绝大多数的函数(也可能是全部,我没有验证过)都进行了别名化,亦即意味着你可以通过Alias子句使用其它的而不是他们原有的名称,你只需简单地改变一下函数名称而它仍然可以正常运行

你可以通过查看VB的Declare语句帮助主题来获取有关Alias的详细说明

消息(Messages)

好了,现在你已经知道什么是API函数了,但你也一定听说过消息(如果你还没有,你很快就会)并且想知道它是什么消息是Windows告诉你的程序发生了哪些事件或要求执行特定 *** 作的基本方法例如,当用户点击一个按钮,移动鼠标,或是向文本框中键入文字时,一条消息就会被发送给你的窗体

所有发送的消息都有四个参数--一个窗口句柄(hwnd),一个消息编号(msg)还有两个32位长度(Long)的参数

hwnd即要接受消息的一个窗口的句柄,msg即消息的标识符(编号)该标识符是指引发消息的动作类型(如移动鼠标),另外两个参数是该消息的附加参数(例如当鼠标移动时光标的当前位置)

但是,当消息发送给你时你为什么看不到呢--就象有人在偷你的信一样请先别恼火,让我告诉你

小偷其实是Visual Basic但它并没有偷走你的信,而是在阅读了之后挑出重要的以一种好的方式告诉你这种方式就是你代码中的事件(Event)

这样,当用户在你的窗体上移动鼠标时,Windows会发送一条WM_MOUSEMOVE消息给你的窗口,VB得到这条消息以及它的参数并运行你在事件MouseMove中的代码,同时VB会把这条消息的第二个32位数(它包含了x,y坐标,单位为像素(Pixel),每个位16位)转换为两个单精度数,单位为缇(Twip)

现在,如果你需要光标坐标的像素表示,然而VB已经把它转换成了缇,因此你需要重新把它转换为以像素为单位在这里,Windows给了你所需要的,但VB"好意地"进行了转换而使你不得不重新转换你可能会问--我难道不能自己接收消息吗答案是肯定的,你可以使用一种叫做子类处理(Subclass)的方法但你除非必须否则最好不要使用,因为这与VB的安全程序设计有一点点的违背(注:子类处理确实有很大的风险,但如果使用得当,是很有用处的不过有一点一定要注意,即千万不要使用VB的断点调试功能,这可能会导致VB崩溃!)

需要补充说明的是:你可以发送消息给你自己的窗口或其他的窗口,只需调用SendMessage或PostMessage(SendMessage会使接受到消息的窗口立刻处理消息,而PostMessage是把消息发送到一个称为消息队列的队列中去,等候处理(它将会在该消息处理完后返回,例如有些延迟))你必须制定接受消息的窗口的句柄,欲发送消息的编号(所有的消息的编号均为常量,你可以通过API Text Viewer查得)以及两个32位的参数。

另一种含义:

1:美国石油协会(API:American Petrolenm Institute):制定机油标准的组织。汽车用发动机机油必须符合API提出的标准。

2:API还有一种含意:空气污染指数。英文 air pollution index 的缩写

3:在JAVA中,API除了有应用“程序程序接口”的意思外,还特指JAVA API的说明文档,也称为JAVA帮助文档。

参考资料:

>

SAP R/3系统是业界最先进、最稳定的ERP系统,国际和国内大型企业采用该系统的比例遥遥于其它ERP系统的总和。SAP R/3内建了二次开发平台,使用的开发语言叫做ABAP,是一种类似于COBOL的编程语言。ABAP在报表输出方面功能相对较弱(只能按行打印在屏幕上或者导出到Excel中处理),所以日常工作中经常需要在外部开发程序。通过程序接口自动读取SAP R/3的数据表(视图),在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。

SAP R/3的接口方式主要有RFC、IDOC、BAPI三种,本文要介绍的是相对比较简单的RFC(Romote Function Call,远程函数调用)。SAP系统RFC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。下面是RFC调用的模型:

本文主要不是讨论SAP R/3函数的开发,因为使用SAP的公司一般都有专门的ABAP开发人员。大家如果有机会接触ABAP平台,可以通过事务代码SE37进入ABAP开发平台的"函数编制器"进行函数开发测试。如图:

下面主要以VB为例介绍一下SAP接口RFC的开发思路。在SAP客户端SAP Gui Client安装的时候,注意选择安装附带的SDK包(最保险是选择完全安装)。RFC接口程序开发,主要用的是"SAPFunctions"这个控件,通过控件在外部程序模拟SAP Gui Client的用户登录和函数调用,然后返回函数的值。请看下面的程序片段和重点注解(尤其是test_Click()):

Private Sub Command1_Click()

' 定义R/3用户名和密码变量(用户名应由SAP管理员开运行函数的权限)

Dim logname As String 22, password As String 22

Call logonr3(logname, password) ' 调用SAP登录界面程序

If logflag Then ' 调用生产、开发系统开关

StatusBar1Visible = True

StatusBar1SimpleText = "正在登录SAP R/3系统"

Dim R3AppServer As String, R3Client As String, R3SystemNo As String

If Form2opPRDValue Then

' 以下服务器参数请根据客户配置情况更改

R3AppServer = "10314" ' 生产系统服务器IP

R3Client = "800" '生产系统集团代码

R3SystemNo = "00" '生产系统号

Else

R3AppServer = "10331" ' 开发系统服务器IP

R3Client = "101"

R3SystemNo = "00"

End If

Unload Form2 ' 释放 Form2 , 所有控件及值不可用

Set Functions = CreateObject("SapFunctions") ' 创建RFC的本地对象

Set Connect = FunctionsConnection ' 设置连接

ConnectApplicationServer = R3AppServer ' 赋值服务器IP

ConnectClient = R3Client ' 赋值SAP集团代码

ConnectLanguage = "ZH" ' 置SAP系统界面中文

ConnectUser = Trim(logname) ' 赋值SAP登录用户名

Connectpassword = Trim(password) ' 赋值SAP登录用户密码

ConnectSystemNumber = R3SystemNo ' 赋值SAP系统号

If Not ConnectLogon(0, True) Then ' 软件登录SAP并判断

MsgBox "登录SAP R/3失败,请重新登录!", vbOKOnly + vbExclamation, "系统提示"

Command1SetFocus

Else ' 登录SAP成功

Command1Enabled = False

Command2Enabled = True

testEnabled = True

End If

StatusBar1SimpleText = ""

StatusBar1Visible = False

End If

End Sub

Private Sub Command2_Click() ' 注销SAP登录

ConnectLogOff

Command2Enabled = False

Command1Enabled = True

testEnabled = False

End Sub

Private Sub Command3_Click() ' 退出SAP接口演示程序

If Form1Command2Enabled Then

MsgBox "退出前请断开SAP R/3系统!", vbOKOnly + vbInformation, "系统提示"

Else

End

End If

End Sub

Private Sub Form_Load()

Command2Enabled = False

testEnabled = False

logoflag = False

End Sub

Private Sub test_Click() ' SAP RFC远程调用处理主演示

Dim GetCustomers As Object

Dim Customers As Object

Dim i As Integer

' 通过RFC接口远程运行SAP内部函数RFC_CUSTOMER_GET

' 赋要调用的SAP内建函数名

Set GetCustomers = FunctionsAdd("RFC_CUSTOMER_GET")

GetCustomersExports("KUNNR") = "0000000103" ' 向函数入口赋值(客户代码)

' 向函数入口赋查询表名称

Set Customers = GetCustomersTables("CUSTOMER_T")

If GetCustomersCall Then ' 调用成功遍历显示客户所有信息条目

For i = 1 To Customersrowcount

MsgBox Customers(i, "KUNNR")

Next i

Else

MsgBox " 搜索出错! 出错信息: " + GetCustomersException

End If

End Sub

SAP的RFC调用是其接口技术中最简单和易用的一种方式,该方式开发比较简便,特别适合于外部报表开发,但对于大数据量的查询效率相对较低。大家在熟练掌握后,可以进一步学习高级的IDOC和BAPI接口开发技术。

以上就是关于怎么给自己的程序提供接口(API)给别的程序 *** 作(api接口怎么用例子)全部的内容,包括:怎么给自己的程序提供接口(API)给别的程序 *** 作(api接口怎么用例子)、程序开发中接口数据是如何连接的、怎么给自己的程序提供接口(API)给别的程序 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10133149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存