主题:  新xtra,可以调用你自己编写的dll函数的插件.

滨滨

职务:版主
等级:4
金币:13.0
发贴:1931
#12003/12/1 8:31:18
XDllWrapper xtra preview for authorware and director



相关文件:点这儿打开

帮助director/authorware调用dll中函数的插件.
-------------------------------------------
支持的数据类型
-------------------------------------------
Director/Authorware :
参数类型可以是: integer,float,string
返回值可以是: integer,float,string

Dll function:
函数形参可以为: int,double(不支持float!),char*
函数返回值: int,double(not float!),char*

-------------------------------------------
函数列表
-------------------------------------------
integer FuncAddr=X_LoadFunction(string DllName, string FunctionName)
载入DLL中的函数,DllName为dll的文件名,FunctionName为函数名,注意API函数有些分????A和????W之分.
返回值: 该函数的地址.失败则返回0.

* Result=X_CallFunction(integer FuncAddr, list Parameters, integer ReturnType)
调用已载入的函数.
FuncAddr是载入的地址.
Parameters:一个列表包含函数的参数.
ReturnType: 指明返回值类型,可以是
0 - 整数.
1 - 浮点娄.
2 - 字符串指针,XDllWrapper会转换为authorware/director的字符串string.
返回值为一个列表,含一个元素即Dll函数中的返回值,如该函数没有返回值则忽略它.
<<<<注意>>>>参数列表中的参数与函数形参必须一致,不然就等着非法操作吧.如形参为double(不支持float),传值时就要用1.0而不是1来调用...

integer Handle=X_stageWindow()
获得展示窗口/舞台的窗口句柄,用于一些windows API函数,在authorware中可以使用WindowHandle变量替代之.
--------------------------------------------



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#22003/12/1 8:39:28
我测试10 几个API,基本类型是正常的。。。



滨滨

职务:版主
等级:4
金币:13.0
发贴:1931
#32003/12/1 9:05:47
给你的那个不能支持字符串返回值,浮点参数也有问题,重下吧



滨滨

职务:版主
等级:4
金币:13.0
发贴:1931
#42003/12/1 9:11:44
一般不提倡从函数中返回字符串,因为函数内部分配的内存是局部的不能被外部使用,必须从堆上分配,而做得不好就会内存泄漏.这里提供只是提供万一的需要,范例中有一个dll源码,演示了分配内存返回字符串和释放内存的过程,在director中如果将字符串传过去以后,在使用结束前不能释放该内存,不然非法操作,说明dr直接使用了该字符串地指针,aw就没有这个问题,估计是对字符串进行了复制.
目前还不支持传址调用的函数,毕竟指针可以引用的数据类型太丰富了,在插件中根本没办法判断.



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#52003/12/1 10:31:01
能不能LOAD没有在系统注册DLL里的函数?呵呵

也就是指定某个路径下的DLL。。



滨滨

职务:版主
等级:4
金币:13.0
发贴:1931
#62003/12/1 10:40:47
当然可以了.
你有没有看范例啊.
加载一个自己写的dll



魔岩

职务:版主
等级:6
金币:34.0
发贴:4453
#72003/12/1 11:23:18
我没下你的新范例呀



hw26

职务:普通成员
等级:1
金币:11.0
发贴:240
#82003/12/1 21:32:06
学习之路漫漫,呵呵