网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Delphi
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.通过原代码学习TComponent类的机.
.delphi编译错误信息.
.Delphi关于线程的消息处理.
.多层数据库开发十一:TClientData.
.CRC32生成码表方法实现.
.singleton之我见.
.Delphi组件与属性编辑器.
.自己写的一个利用快捷键截图的工.
.利用浏览器实现程序界面与实现的.
.delphi来写你的第一个dll文件,非.
.Delphi2005学习笔记4——再谈Nam.
.模拟delphi编辑窗体操作控件。。.
.LineDDA的一个例子.
.先人的DELPHI基础开发技巧.
.动态数据库连接.
.Delphi中关于TApplication类的详.
.在delphi字符中包括单引号(').
.用Delphi制作DLL小结.
.MapX使用数据库数据添加专题图(系.
.在Delphi与C++之间实现函数与对象.

用DELPHI开发AUTHORWARE的u32

发表日期:2006-2-4


用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,"是否退出本系统?")

上一篇:关于开发系统后门软件的几点思路 人气:3915
下一篇:一个很实用的Ehlib排序函数,适合ADO 人气:5238
浏览全部Delphi的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐