关于Flash 打包成DLL 及调用说明

关于 Flash  打包成DLL 及调用说明 一、准备工作 1.安装好Adobe  Flash  8.0 以上版本,推荐Adobe  Flash  CS4 2.安装好VC6.0 二、编辑 Flash  具体的 Flash  学习请查看帮助文档等相关资料。由于理论太罗嗦,这里我直 接给出一个简单的例子: 目标:某工程界面的标题,显示一些参数。总成如下图: 主要显示三个参数:变速器类型、变速器标志速比(蓝色)、变速器实时速比(橙 色)。 步骤如下: 1. 文件新建 Flash  文档(Actionscript2.0) 2. 设置文档属性,大小为1024*125 pixels 3. 保存一下,文件名假设为Header 4. 这样一个名为Header,脚本语言为Actionscript2.0 的 Flash  文档就建好 了。 5. 剩下的就是往里面添加东西了,图片、静态文本、以及右边的时钟我就不罗 嗦了。主要说明一下和VC 通讯相关的一些东西:动态文本以及脚本。 【添加三个动态文本】 分 别 添 加 三 个 动 态 文 本 到 舞 台 上 , 实 例 名 字 分 别 为 BoxType,StdRatio,RealRatio。它们分别用来接收变速箱类型、变速 器标准速比和变速器实时速比三个参数变量的。 设置好颜色,字体,大小。 【添加和VC 通讯的AS 脚本】 首先,说明一下本 Flash  文档的时间轴以及图层结构: 关于 Flash  打包成DLL 及调用说明 本时间轴上有三个关键帧,帧的概念在 Flash  中很重要,做一下阐述: 几种类型帧的小结:(关键帧、空白关键帧、普通帧) 1. 特点 帧——是进行 flash  动画制作的最基本的单位,每一个精彩的 flash  动画都是由 很多个精心雕琢的帧构成的,在时间轴上的每一帧都可以包含需要显示的所有内 容,包括图形、声音、各种素材和其他多种对象。 关键帧——顾名思义,有关键内容的帧。用来定义动画变化、更改状态的帧,即 编辑舞台上存在实例对象并可对其进行编辑的帧。 空白关键帧——空白关键帧是没有包含舞台上的实例内容的关键帧。 普通帧——在时间轴上能显示实例对象,但不能对实例对象进行编辑操作的帧。 2. 区别 1) 关键帧在时间轴上显示为实心的圆点,空白关键帧在时间轴上显示为空心 的圆点,普通帧在时间轴上显示为灰色填充的小方格 2) 同一层中,在前一个关键帧的后面任一帧处插入关键帧,是复制前一个关 键帧上的对象,并可对其进行编辑操作;如果插入普通帧,是延续前一个关键帧 上的内容,不可对其进行编辑操作;插入空白关键帧,可清除该帧后面的延续内 容,可以在空白关键帧上添加新的实例对象。 3)关键帧和空白关键帧上都可以添加帧动作脚本,普通帧上则不能。 3. 应用中需注意的问题 1) 应尽可能的节约关键帧的使用,以减小动画文件的体积; 2) 尽量避免在同一帧处过多的使用关键帧,以减小动画运行的负担,使画面 播放流畅。 层 – 你可以看作是有Z 轴顺序的透明玻璃纸,这在Photoshop 等软件中都有。 要养成一个好的分层习惯:相对独立的东西放在一个单独的图层上,并且给出有 一定意义的名字。 如上图,我在这里就分了很多层,但只有三个关键帧。第一层是AS 脚本层。 这种架构方式经实践证明是和VC 通讯最好的时间轴架构方式。 关于 Flash  打包成DLL 及调用说明 AS 层的第一空白关键帧里面写的是初始化的一些代码,它只被执行一次。 第二帧是主要代码,可以看作是不断循环的Main 函数。第三帧是跳转,只有一 句代码:gotoAndPlay(2); //意思就是调到第二帧。 下面分别给出关键代码:(绿色的是解释) //第一帧:初始化 …… var sBoxType:String = ""; //设置一个字符串变量,设置变速箱类型 var sStdRatio:String = ""; //设置一个字符串变量,设置标准速比 var sRealRatio:String = ""; //设置一个字符串变量,设置实时速比 //第二帧;主要代码 BoxType.text = _root.sBoxType; //动态文本 BoxType 的内容显示为字符串 sBoxType。剩下要做的就是在 //VC 里面改变变量sBoxType 的值就可以了,简单吧!下同。 StdRatio.text = _root.sStdRatio; RealRatio.text = _root.sRealRatio; //第三帧:跳转帧 gotoAndPlay(2); //意思就是调到第二帧。构成一个循环。 6. 上面的工作做完之后,Ctrl+S 保存,Ctrl+Enter 编译测试影片。 没有错误的话,Header.fla 同一目录下会生成一个swf 影片。打开看看效果, 如果没啥错误就可以进入VC 开始下一步工作了! 三、编辑DLL 这里,我就直接简述步骤了: 1. 新建一个名字为MHeader 的DLL 工程,类型为MFC 扩展DLL(因为要导 出MFC 类); 2. 插入一个Dialog,先删除上面默认带的一切东西,设置样式属性为“下层”, “边框”—无。 关于 Flash  打包成DLL 及调用说明 3. 引入 Flash  控件: 工程增加到工程Components and ControlsRegistered ActiveX Controls Shockwave  Flash  Object。 4. 拖拽一个合适大小(匹配swf 文档大小即可)的 Flash  控件到对话框上面。 假设控件ID 为IDC_SWF_HEADER。 5.打开资源窗口,引入Header.swf 资源,类型为DAT,资源ID 为IDR_DATA 6. 为新建的对话框关联一个类 CDllHeader::CDialog, 对话框资源 ID 为 IDD_Header_DLG。查看Resource.h IDD_Header_DLG 定义如下: #define IDD_Header_DLG 9999 7.Ctrl+W打开类向导,为新添加的 Flash  控件IDC_SWF_HEADER 关联一 个变量m_mh,即是 CShockwaveFlash m_mh 8.添加如下关键代码: 1) 打开DllHeader.h 头文件,这里定义了导出类CDllHeader。 在类名前面加上AFX_EXT_CLASS,表明这个类为导出类。 2) 新建一个私有变量CString strFileName 新建一个共有变量HWND m_EXE_hWnd; //定义的主程序窗口句柄 3) 新建如下几个共有函数 void SetStdRatio(CString &str); //设置标准速比的函数 void SetRealRatio(CString &str); //设置实时速比的函数 void SetBoxType(CString &str); //设置箱体类型的函数 void RealseAndCreate(HMODULE hModule); //释放资源并加载 Flash  4) 在DllHeader.cpp 文件中实现上述函数 void CDllHeader::SetStdRatio(CString &str) { m_mh.SetVariable("_root.sStdRatio",str); } void CDllHeader::SetRealRatio(CString &str) { m_mh.SetVariable("_root.sRealRatio",str); 关于 Flash  打包成DLL 及调用说明 } void CDllHeader::SetBoxType(CString &str) { m_mh.SetVariable("_root.sBoxType",str); } void CDllHeader::RealseAndCreate(HMODULE hModule) { CString Type="DAT"; HRSRC res = FindResource(hModule,MAKEINTRESOURCE(IDR_DATA),Type); HGLOBAL gl = LoadResource(hModule,res); HANDLE fp; LPVOID lp=LockResource(gl);//返回指向资源内存的地址的指针。 CString filename="Temp2.dat";//保存的临时文件名 // CREATE_ALWAYS 为不管文件存不存在都产生新文件。 fp= CreateFile(filename ,GENERIC_WRITE,0,NULL,CREATE_ALWAY S, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN,NULL); DWORD a; //sizeofResource 得到资源文件的大小 if (!WriteFile (fp,lp,SizeofResource (hModule,res),&a,NULL)) return; CloseHandle (fp);//关闭句柄 FreeResource (gl);//释放内存 TCHAR strCurDrt[500]; int nLen = ::GetCurrentDirectory(500,strCurDrt); 关于 Flash  打包成DLL 及调用说明 if( strCurDrt[nLen]!='\\' ) { strCurDrt[nLen++] = '\\'; strCurDrt[nLen] = '\0'; } strFileName = strCurDrt; strFileName += "Temp2.dat"; m_mh.LoadMovie(0, strFileName); m_mh.Play(); } 5) 还要重载虚函数PreTranslateMessage,屏蔽 Flash  右键菜单。 BOOL CDllHeader::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { if(pMsg->wParam==VK_ESCAPE) return true; if(pMsg->wParam==VK_RETURN) return true; } //屏蔽 Flash  监控窗口中的右键菜单 if((pMsg-> message == WM_RBUTTONDOWN) || (pMsg-> message == WM_RBUTTONDBLCLK)) { return TRUE; } return CDialog::PreTranslateMessage(pMsg); } 至此,DLL 代码添加完毕,编译通过之后,拷贝 Debug 或 Release 目录下的 关于 Flash  打包成DLL 及调用说明 DLL,LIB 文件以及头文件DllHeader.h,shockwaveflash.h 到目标工程目录 下备用。然后,你可以进入下一步,调用此DLL。 四、 调用DLL  假设目标工程为 CCAMTMonitor,拷贝上述 DLL 库文件及头文件到 CCMATMonitor 工程目录下,假设我要把这个DLL 资源里面的对话框放在一个 主对话框的最上端,如下图所示的位置: 那么,你就要这么做: 1. 在主对话框(就是你的DLL 资源要放置于的对话框)的头文件里面加入以下 代码: …… #include "DllHeader.h" …… class CAMTMonitorDlg : public CDialog { // Construction public: CDllHeader m_dllHeader; …… 2. 为了代码的简洁,明了。加载这个 DLL 我们专门设置一个函数 LoadDllHeader 其定义及实现文件如下: //加载DLL 中的资源HEADER void CAMTMonitorDlg::LoadDllHeader() { 关于 Flash  打包成DLL 及调用说明 HINSTANCE exe_hInstance = GetModuleHandle(NULL); //获取EXE 模块句柄 //或者HINSTANCE exe_hInstance = AfxGetResourceHandle(); HINSTANCE dll_hInstance = GetModuleHandle("MHeader.dll"); //获取DLL 模块句柄 AfxSetResourceHandle(dll_hInstance); //切换状态 m_dllHeader.Create(IDD_Header_DLG); m_dllHeader.RealseAndCreate(dll_hInstance); m_dllHeader.SetWindowPos(&wndBottom,-2,-20,1024,143,SWP_ SHOWWINDOW); m_dllHeader.ShowWindow(SW_SHOW | SW_SHOWNORMAL); AfxSetResourceHandle(exe_hInstance); //恢复状态 } 3. 在OnInitDialog()函数里面调用上面这个LoadDllHeader 函数即可。 4. 别忘了,要在工程设置连接里面加入MHeader.lib 文件。 编译一下,没啥错误的话你会发现你的 DLL 资源已经加载到这个对话框的顶端 了,作为一个标题头还是不错的! 5. 但是,我们还要显示一些参数,还记得编辑 Flash  文档的时候定义的那三个 字符串变量sBoxType、sStdRatio、sRealRatio 以及编辑DLL 时定义的那 三个函数吗? void SetStdRatio(CString &str); //设置标准速比的函数 void SetRealRatio(CString &str); //设置实时速比的函数 void SetBoxType(CString &str); //设置箱体类型的函数 你可以在一个按钮里面写入以下代码测试以下通讯是否成功: CString strtmp; strtmp.Format("CCAMT_2009"); m_dllHeader.SetBoxType(strtmp); strtmp.Format("12.00"); m_dllHeader.SetRealRatio(strtmp); 关于 Flash  打包成DLL 及调用说明 strtmp.Format("12.10"); m_dllHeader.SetStdRatio(strtmp); 到此,基本过程就完了。编辑 Flash 编辑DLL 调用DLL ,就这么简单!如果 你认为VC 里面的控件不够多,界面不好看。那么结合 Flash  强大的动画、多媒 体功能以及动态链接库的技术,想怎么好看都可以! By Herowuking 2009.07.09
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将Qt代码打包DLL给C使用的步骤如下: 1. 在Qt项目中创建一个新的库项目,方式是在Qt Creator中选择“新建项目” -> “其他项目” -> “库” -> “C++库”。 2. 在新创建的库项目中,将需要的Qt代码文件添加到项目中。 3. 在.pro文件中,确保设置好了生动态库的编译选项。例如,在TEMPLATE行之后添加一行:TEMPLATE = lib 4. 将需要导出给C的函数声明为extern "C"。例如,在.h文件中的函数声明前添加extern "C"关键字。 5. 使用Q_DECL_EXPORT宏进行导出函数。例如,在函数定义之前添加Q_DECL_EXPORT关键字。 6. 构建项目,生动态库文件。编译完后,将会生一个DLL文件。 7. 在其他C项目中,将生DLL文件拷贝到正确的位置。通常情况下,将DLL文件放在与C代码所在的位置相同的目录下。 8. 在C项目中,通过#include指令引入Qt代码的头文件。 9. 使用动态库中导出的函数,调用Qt功能。 需要注意的是,在将Qt代码打包DLL时,需要确保Qt的运行时库(即Qt DLL文件)可以在C项目中找到,否则会出现运行错误。可以将Qt的DLL文件一同打包,并在C项目中进行适当的配置,或者将Qt DLL文件放置在系统的搜索路径中。 总之,将Qt代码打包DLL给C使用的关键点是通过在库项目中设置合适的编译选项并导出需要的函数,然后在C项目中引入头文件并使用动态库中的函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值