CloseMaxScript6 模块

概述

命令附属文件是主脚本周边相关的脚本内容
现已将这2个概念整合为模块

添加模块

	--是否全局启用模块授权
	config.UseModuleAuth = true
	--模块授权源代码
	config.ModuleAuthSource = "(false)"
	--是否压缩模块授权代码
	config.CompressModuleAuthCode = false
	
	--添加嵌入模块源代码
	--arg1 模块唯一key
	--arg2 源代码
	--useAuth 该模块是否使用授权
	--compress 是否压缩
	config.AddEmbeddedModuleSource "sayHello1" "print 111" useAuth:true compress:false
	config.AddEmbeddedModuleSource "sayHello2" "print 222" useAuth:false compress:false
	--config.AddEmbeddedModuleSource "testModlue" (Cmxs6Publisher.readFile @"C:\temp\test.ms") useAuth:false compress:false
	
	--添加模块文件
	config.FileModuleExtension = ".dat"
	config.AddFileModule (@"C:\temp\test2.ms") useAuth:false

使用模块

在大型项目中可以对其进行封装,按需加载,以便提高项目初次加载速度
示例

try(destroyDialog r_name)catch()

rollout r_name "测试工具"
(
	button btnCall1 "调用工具1" width:100 offset:[0,5]
	button btnCall2 "调用工具2" width:100 offset:[0,5]
		
	fn usingModule moduleName =
	(
		--编译后的环境
		if '@cmxs_env' == true then
		(
			--local product = Cmxs6Container.MxsRuntime.Get "LastTool" --测试时可用这个,编译时推荐下面的 
			local product = Cmxs6Container.MxsRuntime.Call "GetProduct" "'@cmxs_guid'"
			local res = product.Call "ImportModule" moduleName 
			print ("ImportModule 执行结果:" + res as string)
		)
		--测试开发环境,载入源代码
		else
		(
			--filein (@"c:\MyProject\" + moduleName + ".ms")
		)
	)

	on btnCall1 pressed do
	(
		global gVar1
		usingModule "功能1"
		gVar1()
	)

	on btnCall2 pressed do
	(
		global gVar2
		usingModule (@"C:\Users\pc\AppData\Local\Temp\_cmxs_temp\tool2.dat")
		gVar2()
	)
)
createDialog r_name 200 180

所有模块使用方式解释

global gVar1

--执行模块,每调用一次从新执行
product.Call "ExecuteModule" "sayHello1"
product.Call "ExecuteModule" @"c:\temp.dat"

--在非ui线程执行模块,禁止操作max对象,否则会导致max崩溃
product.Call "ExecuteModuleAsync" "sayHello1" 1000

--导入模块(如果已经执行,则不会再次执行)
product.Call "ImportModule" "sayHello1"
product.Call "ImportModule" @"c:\temp.dat"

--从资源中执行模块(把模块文件当做资源嵌入的情况,听起来有点脱裤子放屁,但这是有实际的应用场景)
product.Call "ExecuteFileMoudleFromResources" "resName"
posted @ 2025-01-24 20:07  trykle  阅读(51)  评论(0)    收藏  举报