如何利用变成语言编写UCD函数以供Authorware使用
毕业论文题目是研究UCD函数在Authorware中的应用,在查找UCD函数编写这方面问题的时候遇到了困难,网上关于这部分的知识很少,希望哪位高手能给详解下,主要是编写步...
毕业论文题目是研究UCD函数在Authorware中的应用,在查找UCD函数编写这方面问题的时候遇到了困难,网上关于这部分的知识很少,希望哪位高手能给详解下,主要是编写步骤,最好有点小例子!
展开
1个回答
展开全部
Authorware 本身的功能和它所提供的系统函数,来提高Authorware多媒体程序的灵活性是不够的。有些时候,用户需要利用其他的开发工具来生成用户自定义函数,用来拓展程序的功能。 正是因为UCD得灵活性与方便性,许多第三方软件商纷纷针对Authorware制作出了许多功能各异的UCD,使用这些UCD,会使我们的程序增色不少。除了会使用别人创建好的UCD之外,我们还必须会创建自己的UCD函数,因为有时候现有的UCD并不能满足我们的需求,这时之恩能够自己开发满足需要的UCD了。 “万事开头难”,如果让我们现在编写一个UCD函数,可能会觉得无从下手,其实,只要弄清楚了UCD函数的原理,创建一个功能强大的UCD函数是相当容易的,当然,前提条件是我们必须有一定的编程水平。下面我就介绍一下如何使用Delphi来开发一个32位的UCD函数(U32)。我将创建两个UCD函数以示为例 a) Add函数:实现两个数的加法; b) UCase函数:把一个字符串装换成大写。 具体步骤如下: 1. 创建一个常规DLL u 启动Delphi3.0,然后选择File=> New Application 菜单命令创建一个新的工程 u 选择File=> Remove from Project 菜单命令,在弹出窗口的列表中选择Forml,单击OK按钮,接着会出现一个确认窗口,在其中单击No按钮,不保存所做的修改。 u 选择File=> New 菜单命令,然后再 New Items 窗口中选择Unit项,单击OK按钮,从而在新工程中增加一个新的单元。这个新单元中将包含UCD函数中的所有代码。 u 接下来,我们要修改现有的代码,以便创建一个DLL文件,而不是一个EXE文件。选择View=> Units 菜单命令,在View Unit 窗口中选择Project1,然后单击OK按钮。 u 这时在Project1.dpr窗口中会增加一个名为Project1的面板,我们会注意到在该面板的第一行代码是program Project1,其作用是创建一个EXE文件。为了使Delphi创建一个DLL文件,我们必须把其中的“program”关键词改成“library”。 u 由于我们这个工程不需要窗体(Form),因此在“uses”段,删除对“Forms”的引用。因为如果保留这个引用,则最后所得到的DLL文件将会比没有这个引用所形成的DLL文件大150K左右。当然,如果需要在DLL中使用窗体,则请保留对“Forms”的引用。 u 在“uses”段之后,我们需要对所有将在Authorware中使用的自定义函数进行声明,在本例中,我们先加入下面的代码: Exports Add: 这句代码的作用是输出Add函数,以便其他应用程序也能使用。 u 由于DLL文件并不需要执行,所以我们还要将begin和end之间的“Application.Initialize”和“Application.Run”行删掉。 最后修改的代码应该如下所示: library Project1; uses Unitl in ‘UNT1.PAS’; exports Add; | $ R *.RES| begin end. 现在对工程进行保存,其中工程的名字就是最后所创建的DLL的名字,在本例中我们将工程命名为DllDemo.dpr,将Unitl单元保存为Unitl.pas。 2. 创建Add 函数 现在我们来实现Add这个自定义函数。主要步骤如下: u 在DllDemo.dpr代码窗口中单击Unitl标签,以显示Unitl面板中的代码窗口。 u 由于Add函数非常简单,在传递或返回一个integer,word或long型的值时,不需要做任何特别的工作,因而该函数的创建方法和其他任何Delphi函数一样。 首先,如果要创建一个在Authorware中使用的函数,必须要将其声明为可以输出的函数,因而,请在“interface 关键字后面,加入如下代码: ues sysutils,wintypes,winprocs; function Add(n1,n2:Integer):Integer;export; u 32位版本的Delphi程序需要一个附加的代码段,并且在该代码段上要增加一个名为“stdcall”的指示符。但是,16位版本的Delhpi程序却不能识别“stdcall”指示符,因此,为了使我们的DLL能够同时支持16位和32位版本的Delphi程序,我们可以使用条件包含语句,请在Add函数声明的后面加入下面所示代码: |¥ ifdef WIN32| stdcall;($ endif) 这样,编译器仅仅在32位版本的情况下才加入附加的代码段。这时修改后应该如下所示: function Add(n1,n2,Integer):Integer;export; |$ ifdef WIN32| srdcall;|endif| u 现在该给Add函数增肌实现代码了。在“implementlation”关键字后面,加入下面所示的代码: function Add(n1,n2:Integer ): Integer; begin Result : = n1 + n2 ; end ; 至此,Add函数就创建完毕。 3. 创建UCase 函数 UCase函数的代码要稍微复杂一些,由于传递给Authorware或从Authorware返回的字符串总是C语言类型的字符串,因此,如果要调用一个使用了pascal类型字符串的函数,则必须首先把C语言类型的字符串转换成pascal类型的字符串,并且,我们不能直接修改由Authorware传递回来的字符串,因为该字符串是只读的。 u 打开Unitl代码窗口,然后在“interface”代码段的ReturnString 函数声明后面,加入下面代码,以声明Ucase函数: function UCase(StringIn:Pchar) : Pchar ;export; | $ ifdef WIN32| stdcall ; | $ endif | u 接着在“implementation”代码段的ReturnString函数实现代码后面,加入UCase函数的实现代码: function UCase(StringIn : Pchar ) : Pchar ; | NOTE: I haven’t done any error checking – for string length.etc. | Var retstr : array[0..64] of char ; | string to return to APW| instr : outstr : string[64] ; | some temp strings | begin instr : = Strpas(StringIn) : |convert C string to pascal string ; | outstr : = Uppercase( instr ): | do the function, using Delhpi’s built – in function | strplcopy( retstr , outstr , 60): | convert pascal string to C string | Result : = ReturnString(retstr) : | return string to APW | end ; u 为了使此函数能够在Authorware中使用,还必须在工程文件中将其声明为可输出的函数,请单击代码窗口上方的DllDemo标签打开工程文件,然后再输出Add函数的语句后面加上下面代码: Exports UCase ; 至此,UCase函数就完成了。 4. 把常规DLL 转换成UCD 1) 设置工程的一些选项 l 返回到Delphi中,选择“Project = > Options”菜单命令打开Project Options窗口,然后单击窗口中的“Compiler”标签。 l 在“Compiler”面板的Debugging组合域中,清楚所有复选框。 l 单击OK按钮关闭Project Options窗口。 2) 创建一个资源文件 到目前为止,我们创建的还仅仅是一个常规DLL,而不是Authorware所支持的UCD,因此,下面的工作就是在现有的DLL中增加UCD资源,以便Authorware能够直接装入其中的函数。 为了实现这一点,需要创建一个后缀名为.rc的资源文件,然后将其编译成.res文件,请使用任何能够编辑文本文件的工具软件,然后再其中加入如下代码,最后将其保存在刚才所创建的DLL所在目录中,文件名为MyUCD.rc。请注意不要使该资源文件的名字和工程文件的名字一样(即都为DllDemo),否则Delphi会覆盖该资源文件的。 代码如下: 1 DLL_HEADER PRELQAD DISCARDAPLE BEGIN “ Add \ 0 ”, “UCase \ 0” , “ \ 0”, END Add DLL_HEADER PRELQAD DISCARDAPLE BEGIN “ \ 0” , “ I \ 0” , “II \ 0”, “Result : = Add( Num1 , Num2 ) \ r \ n”, “ \ r \ n” , “计算两个整数Num1和Num2的和 \ 0” , END UCase DLL_HEADER PRELQAD DISCARDAPLE BEGIN “ \ 0” , “S \ 0” , “S \ 0”, “Result : = UCase( str ) \ r \ n”, “ \ r \ n” , “把字符串str变成大写形式返回给Result \ 0” , END 5. 实现UCD 最后的工作就是编译刚才创建的资源文件以实现UCD函数了。 为了完成这部分工作,需要借助一下DOS命令行,在Delphi3.0中,用来编译资源文件的执行文件名为BRC32.EXE,它位于Delphi3.0的Bin目录下。打开一个DOS窗口,进入到我们保存Delphi工程所在的目录,然后再DOS提示符下输入如下的语句: C: \ Progta-1 \ Borland \ Delphi-1 \ Bin \ Brc32.exe – r MyUCD.rc – fdMyUCD.res 按下回车符,DOS命令马上就会被执行。执行结束后,在当前目录下就可以找到一个名为MyUCD.res的文件。 现在需要把编辑后的资源文件加入到我们的工程中。因此,返回到Delphi中,在代码窗口中单击DllDemo标签打开工程代码窗口,找到下面的代码行: | $ R * .res| 如果工程中没有使用窗体,则可以删除此行,由于我们的UCD函数就没有使用窗体,因此可以删除,当然,保留此行也不会造成任何问题。在此行后面,加入如下的代码: | $ R MyUCD.res| 至此,所有的工作就完成了,编译此工程,然后再Authorware中打开一个新文件进行测试。一切如我所预料的那样,当然,为了统一起见,建议把DllDemo.dll更名为DllDemo.u32,这样,其他用户就知道此文件是一个UCD文件了。
求采纳
求采纳
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询