用DELPHI开发AUTHORWARE的u32

2008-04-09 04:21:47来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

用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打开工程文件在

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:关于开发系统后门软件的几点思路

下一篇:Authorware UCD 开发大揭秘(二)