如何为Authorware改语言写UCD函数?
仅靠Authorware本身的功能和它提供的系统函数来提高Authorware多媒体程序的灵活性是不够的。有时,用户需要使用其他开发工具生成自定义函数来扩展程序的功能。正是因为UCD的灵活方便,很多第三方软件厂商为Authorware制作了很多功能各异的UCD。使用这些UCD会给我们的节目增色不少。除了使用别人创建的UCD,我们还必须创建自己的UCD函数,因为有的时候现有的UCD不能满足我们的需求,这时候En可以开发出满足我们需求的UCD。“万事开头难”。如果我们现在写一个UCD函数,我们可能会感到不知所措。事实上,只要我们理解UCD函数的原理,创建一个强大的UCD函数是相当容易的。当然,前提是要有一定的编程水平。我来介绍一下如何用Delphi开发一个32位UCD函数(U32)。我将创建两个UCD函数作为例子:a)加法函数:将两个数相加;B) UCase函数:将一个字符串变成大写。具体步骤如下:1。创建一个普通的DLL u启动Delphi3.0,然后选择File = & gt“新建应用程序”菜单命令创建一个新项目u select File = & gt“从项目中移除”菜单命令,在弹出窗口的列表中选择“Forml ”,单击“确定”按钮,然后出现一个确认窗口,在该窗口中单击“否”按钮保存更改。u选择文件= & gt新建菜单命令,然后在新建项窗口中选择单元项,点击确定按钮,在新项目中添加一个新单元。这个新单元将包含UCD函数中的所有代码。u接下来,我们将修改现有代码来创建一个DLL文件,而不是EXE文件。选择视图= & gt“单位”菜单命令,在“查看单位”窗口中选择Project1,然后单击“确定”按钮。u此时,项目1中会添加一个名为Project1的面板。我们会注意到面板中的第一行代码是程序Project1,用来创建一个EXE文件。为了让Delphi创建一个DLL文件,必须把关键字“program”改成“library”。u因为我们在这个项目中不需要表单,所以在“使用”部分,删除对“表单”的引用。因为如果保留这个引用,最终的DLL文件会比没有这个引用形成的DLL文件大150K左右。当然,如果你需要在一个DLL中使用窗体,请保留一个对“窗体”的引用。在“使用”部分之后,我们需要声明所有将在Authorware中使用的自定义函数。在这个例子中,我们首先添加以下代码:Exports Add:这个代码的作用是输出Add函数,以便其他应用程序可以使用它。因为DLL文件不需要被执行,我们需要删除行" Application。初始化“和”应用程序。在开始和结束之间奔跑。最后修改的代码应该是这样的:库项目1;使用Unitl in 'UNT1。PAS ';出口增加;| $ R *。开始结束。现在保存项目,其中项目的名称是最后创建的DLL的名称。在本例中,我们将项目命名为DllDemo.dpr,并将Unitl单元保存为Unitl.pas. 2。创建添加函数现在让我们实现添加自定义函数。主要步骤如下:u单击DllDemo.dpr代码窗口中的UNILL选项卡,在UNILL面板中显示代码窗口。u由于Add函数非常简单,在传递或返回一个整数、单词或long的值时不需要做任何特殊的工作,所以创建这个函数的方法和其他任何Delphi函数是一样的。首先,如果要创建一个在Authorware中使用的函数,必须声明为输出函数。因此,请在“interface keyword: UESyutils,WinTypes,Winprocs函数Add(n1,N2:Integer):Integer;出口;32位版本的Delphi程序需要一个额外的代码段,在代码段中要添加一个名为“stdcall”的指示符。但是,16位版本的Delhpi程序无法识别“stdcall”指示符。因此,为了使我们的DLL同时支持16位和32位版本的Delphi程序,我们可以使用条件包含语句。请在Add函数声明后添加以下代码:| ifdefwin32 | stdcall($ endif)这样,编译器只在32位版本的情况下添加额外的代码片段。此时的修改应该是这样的:函数Add (N1,N2,整数):整数;出口;| $ ifdef WIN32 | srdcall|endif| u现在是时候给Add函数添加肌肉了。在关键字“implementlation”后,添加以下代码:函数Add (N1,N2:整数):整数;开始结果:= n 1+N2;结束;至此,Add函数创建完毕。3.创建UCase函数UCase函数的代码稍微复杂一点。因为传递给Authorware或者从Authorware返回的字符串都是C型字符串,所以如果要调用一个使用pascal型字符串的函数,必须先把C型字符串转换成pascal型字符串,而Authorware传回的字符串因为是只读的,所以我们不能直接修改。u打开Unitl代码窗口,然后在“接口”代码段的ReturnString函数声明后,添加以下代码声明Ucase函数:function Ucase(string:pchar):pchar;出口;| $ ifdef WIN32 | stdcall| $ endif | u然后,在“实现”代码段中ReturnString函数的实现代码后,添加UCase函数的实现代码:function UCase(string:pchar):pchar;|注意:我没有做任何错误检查-字符串长度等| Var retstr : array[0..64]的char|返回APW的字符串| instr:outstr:string[64];|某些临时字符串| begin instr:= Strpas(StringIn):|将C字符串转换为pascal字符串;| outstr : =大写(instr ): |做函数,使用Delhpi的内置函数| strplcopy( retstr,outstr,60): |将pascal字符串转换为C字符串| Result:= return string(retstr):|将字符串返回给APW | end;u为了在Authorware中使用该函数,必须在项目文件中将其声明为可导出函数。请单击代码窗口顶部的DllDemo选项卡打开项目文件,然后在输出Add函数的语句后添加以下代码:Exports UCase至此,UCase功能完成。4.将常规DLL转换成UCD 1)设置一些项目的选项L返回Delphi,选择"项目= >选项"菜单命令打开项目选项窗口,然后单击窗口中的编译器选项卡。l在编译器面板的调试组合字段中,清除所有复选框。l单击确定按钮关闭项目选项窗口。2)创建资源文件到目前为止,我们只创建了一个常规的DLL,没有Authorware支持的UCD。所以接下来的工作就是在现有的DLL中添加UCD资源,让Authorware可以直接加载其中的函数。为了实现这一点,您需要创建一个后缀为。rc,然后编译成. res文件。请使用任何可以编辑文本文件的工具软件,然后在里面添加下面的代码,最后保存在刚刚创建的DLL所在的目录下,文件名为MyUCD.rc,请注意不要使资源文件的名称与工程文件的名称相同(即都是DllDemo),否则Delphi会覆盖资源文件。代码如下:1 DLL _ header prelqad Discard aple begin " Add \ 0 "," UCASE \ 0 "," 0 ",END ADDLL _ header prelqad Discard aple begin " \ 0 "," I \ 0 "," ii \ 0 "," result: = add (Num1,Num2) \ r \ n "," r \ n ","计算两个整数Num1和num 2 \ 0之和",END UCASE DLL _ header prel qad Discard APL为了完成这部分工作,有必要使用DOS命令行。在Delphi3.0中,用于编译资源文件的可执行文件名为Brc32.exe,位于Delphi3.0的Bin目录下,打开一个DOS窗口,输入我们保存Delphi项目的目录,然后在DOS提示符下输入以下语句:c:\ progta-1 \ borland \ Delphi-1 \ Bin \ BRC 32 . exe–r myucd . RC–fdmycd . RES按回车,DOS命令会立即执行。执行后,您可以在当前目录中找到一个名为MyUCD.res的文件。现在我们需要将编辑过的资源文件添加到我们的项目中。所以回到Delphi,在代码窗口中点击DllDemo标签打开工程代码窗口,找到下面一行:| $ R *。res|如果项目中不使用该表单,可以删除这一行,因为我们的UCD函数不使用该表单,所以可以删除。当然,保持这条线不会有任何问题。在这一行之后,添加以下代码:| $ R MyUCD.res|至此,所有工作完成,编译这个项目,然后在Authorware中打开一个新文件进行测试。一切都如我所料。当然,为了统一起见,建议将DllDemo.u32改名为DllDemo.u32,这样其他用户就会知道这个文件是UCD文件。
寻求收养