分享
 
 
 

用DELPHI开发AUTHORWARE的u32

王朝delphi·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

用DELPHI开发AUTHORWARE的u32

函数功能是AUTHORWARE最突出的特征,利用AUTHORWARE提供的系统函数能够完成一些复杂的控制任务。对于一些特殊的任务,AUTHORWARE允许用户自己定义函数,使得程序设计具有更大的灵活性。对于windows系统来说,自定义函数是以动态链接库(DLL)文件存储的,因此存储自定义函数的文件与当前交互式应用程序文件是分立。本文介绍一下如何用DELPHI开发AUTHORWARE的自定义函数—32 bit U32,本文以DELPHI开发可在AUTHORWARE中调用显示message box的U32为例子。虽然AUTHORWARE ATTAIN 5.0已提供了使用knowledge objects 显示message box的功能,但在4.0以前的版本无此功能,这就可用其它语言开发自己的U32,在AUTHORWARE中调用。

开发U32可分为五个步骤:

创建工程文件

创建函数

创建资源文件

编译资源文件

创建u32

1.创建工程文件

在file/new选择dll生成一个dll文件,在file/add to project….加入一个包含U32函数代码的单元myunit.pas(此单元在第二步创建函数中详细说明)在uses后必须声明所有可在authorware中调用的函数。例如:

exports MsgBox;

最终的代码如下所似:

library authorware;

uses

SysUtils,Classes,

myunit in 'myunit.pas';

exports MsgBox;

begin

end.

2.创建函数

当你创建一个函数可用在authorware中,必须声明为exported 函数在关键字interface 后面加入代码如下:

interface

uses ,Dialogs,SysUtils,windows;

function MsgBox(msg:string;mbType:

Word;title:string):WORD;export;

Delphi32 需要添加{$ifdef WIN32} stdcall ;

($endif} 在函数声明后面如:

function MsgBox(msg:string;mbType:

Word;title:string):WORD;export;

{$ifdef WIN32} stdcall ; {$endif}

现在我们为函数加入代码在implementation后面:

const

OKOnly=0;

OKCancel=1;

AbortRetryIgnore=2;

YesNoCancel=3;

YesNo=4;

RetryCancel=5;

Critical=16;

Question=32;

Excalamation=48;

Information=64;

DefaultButton1=0;

DefaultButton2=256;

DefaultButton3=512;

ApplicationModal=0;

SystemModal=4096;

function StrToPch(Str:string):PChar;

var a:PChar;

begin

a:=StrAlloc(Length(Str)+1);

StrPCopy(a,Str);

StrToPch:=a;

end;

function MsgBox(msg:string;mbType:

Word;title:string):WORD;

VAR

LpText,lpCaption:Pchar;

h:HWND;

begin

lpText:=StrToPch(title);

lpCaption:=StrToPch(msg);

h:=GetActiveWindow();

MsgBox:=MessageBox(h,lpText,lpCaption,mbType);

end;

3.创建资源文件

最后我们要做的事情是创建资源文件,这样authorware才能直接调用函数。必须先创建.rc文件然后编译成.res文件。使用记事本创建.rc的资源文件。加入如下定义:我将在后面解释这些定义:

1 DLL_HEADER PRELOAD DISCARDABLE

BEGIN

"MsgBox\0",

"\0"

END

msgbox DLL_HEADER PRELOAD DISCARDABLE

BEGIN

"\0",

"W\0",

"SWS\0",

"Result := MsgBox(msg,mbType,title)\r\n",

"\r\n",

"show messagebox\0",

END

如果一个 dll文件是按authorware调用转换格式编写,则存储于其中的所有自定义函数的目录也包含在该文件中,并且authorware在调用这些函数时所需的信息也包含在内,其目录称为目录源,而且目录源中的每一个函数有相应的定义,这些定义称为定义源。具体格式如下:

1. 目录源

目录源的格式如下所示:

| DLL_HEADER PRELOAD DISCARDABLE

BEGIN

“functionname [=exportname]\0”,

“functionname [=exportname]\0”,

….

“functionname [=exportname]\0”,

“\0”

END

① | 是目录源标识符;

② DLL_HEADER 是用于创建描述性文字的起始标记;

③ BEGIN 表示该目录源文件的开始,

而END则表示该目录源的结尾。

2.自定义函数的定义格式

对于目录源中每一函数都要有一个相应的定义格式,具体格式如下所示:

functionname DLL_HEADER PRELOAD DISCARDABLE

BEGIN

“dllfilename\0”

“returnvalue\0”

“argumentlist\0”

“description>”,

“description”,

“description\0”

END

① functionname 指的是在目录源中以定义的函数名;

② DLL filename 表示存储函数的dll文件名;

③ Returnvalue 表示该函数返回值类型;

④ Argumentlist 表示该函数中的参数类型列表;

⑤ Description 表示该函数描述性正文。

描述性正文可以有很多行组成,但最后一行必须加上“\0”结束符。

3.参数类型描述格式

参数类型用一个大写字母表示,每一个字母表示一个参数格式,如下表所示:

描述格式 类型 描述格式 类型

C Signed char P Far pointer

B Unsigned char F Float

I Signed short integer D Double

W Unsignedshort integer S Handle

L Signed long integer V Void

U Unsigned long integer

4.编译资源文件

把.rc的资源文件保存为a3w.rc(注意不能保存文件名与dll文件名相同否则delphi自己的资源文件会覆盖它),delphi自带的编译文件为brc32.exe,在dos模式下运行:

c:\delphi32\bin\brc32 -r a3w.rc –foa3w32.res

现在把资源文件加入工程中,返回delphi在view/projcet source打开工程文件在

exports MsgBox;后可看到:

{$R *.RES}

删除该行加入: {$ifdef WIN32}

{$R a3w32.res}

{$else}

{$R a3w16.res}

{$endif}

编译工程文件.

5.创建u32

我们已经创建了32bit的authorware.dll,把它改名成authorware.u32.现在已成功创建了U32.在authorware中调用authorware.u32在运算设计按钮添加代码:

MsgBox("警告框",1+32+0+4096,"是否退出本系统?")

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有