2023年12月13日发(作者:)

楼主 发表于: 2005-01-07Virtools SDK开发教程之一(封装VT文件到一个EXE文件中的方法)建立独立播放的VT可执行文件倒序阅读 只看楼主 小中大

更多操作▼前提:安装VC++6.0;安装DirectX SDK 。因为SDK中提供的文件就是基于VC++的。而编译这些文件要用到DirectX中的Lib和头文件等,所以DirectX_SDK要安装。由于现在大多数朋友用的VT都是3.0或以上版本的,可以只安装DirectX9.0 SDK,如果你是net开发环境,直接安装DirectX9.0 c SDK版本;如果你是VC6用SDK extras把DirectX9.0 SDK升级到DirectX9.0C SDK即可版本.经过测试VT3.08 SDK对DirectX9.0C SDK完全是支持的.1.新建一个文件夹,把你VT安装目录下的Sdk中的及Standalone Playe放进来.沙发 发表于: 2005-01-07Re:如图:只看该作者 小中大

图片:

2.用VC++打开,出现寻找其他的dsp文件的窗口,选择取消。图片: 3.在VC++的FileView中删除所有才找不到位置的档案,只留下NewPlayerStatic files如图:图片:

4.在Projectoption中Link相应的头文件和库文件.7楼 发表于: 2005-01-07Re:如图我这里安装了DirectX8 SDK和DirectX9 SDK)只看该作者 小中大

图片:04_ 8楼 发表于: 2005-01-07Re:如图只看该作者 小中大

你要保证你的DirectX SDK的Lib目录要在C:Program FilesMicrosoft Visual StudioVC98LIB的上边.你如果只安装了DirectX9.0 SDK这样编辑Lib的引用roject--->Setting--->Link,在Object/library modules栏目中只留下以下的 Ws2_ 图片:

9楼 发表于: 2005-01-07Re:只看该作者 小中大

5.这时你可以编译的文件文件(生成一个播放器).执行可以发现生成的EXE比较大,是因为我们把DLL中的函数和接口等全部封装在EXE文件中的缘故.执行这个文件.10楼 发表于: 2005-01-07Re:如图只看该作者 小中大

图片:

11楼 发表于: 2005-01-07Re:6.改造我们的Windows,因为我们是要封装VT到EXE中,所以把右键菜单,不需要的按钮全部去处.只看该作者 小中大

在VC++中的ClassView中找到回调函数LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)注释掉相应消息响应函数.//屏蔽右键菜单:注释掉case WM_RBUTTONUP: OnContextMenu(); break;这一行//屏蔽掉按钮的单击消息响应(关闭按钮的响应不应注释掉):注释掉这几行Code:case BTN_PLAY:

g_CurrentPlayState|=1;

OnPlayPause(0);

break;case BTN_RESET:

g_CurrentResetState=2;

OnReset();break;case BTN_LOAD:

g_CurrentLoadState=2;OnLoad();break;12楼 发表于: 2005-01-07Re:7.修改重画标题栏函数void RepaintTitleBar(),去掉Load,Play和Pause三个按钮的显示.//注释掉这几行代码:只看该作者 小中大 DrawState(dc2,NULL,NULL,(DWORD)g_Virtools,0,3,CenterY-10,0,0,DST_BITMAP|DSS_NORMAL);DrawState(dc2,NULL,NULL,(DWORD)g_Reset[g_CurrentResetState],0,Center-64,CenterY-9,0,0,DST_BITMAP|DSS_NORMAL);DrawState(dc2,NULL,NULL,(DWORD)g_Plays[g_CurrentPlayState],0,Center+26,CenterY-9,0,0,DST_BITMAP|DSS_NORMAL);DrawState(dc2,NULL,NULL,(DWORD)g_Load [g_CurrentLoadState],0,Center-19,CenterY-9,0,0,DST_BITMAP|DSS_NORMAL);13楼 发表于: 2005-01-07Re:8.这时候我们来更改Windows的窗口标题:我们让它支持中文的显示:只看该作者 小中大

在VC++中的ResourceView中找到String Table.选中他下边的子项,在右键菜单中打开它的属性窗口,把Language修改成Chinese.14楼 发表于: 2005-01-07Re:如图只看该作者 小中大

图片:

15楼 发表于: 2005-01-07Re:9.编辑右边的TITLE项,输入你的标题.只看该作者 小中大

16楼 发表于: 2005-01-07Re:如图只看该作者 小中大

图片: 17楼 发表于: 2005-01-07Re:10.把头文件"afxRes.h"包到Resource.h文件中去.在Resource.h中加入这一行:#include只看该作者 小中大

18楼 发表于: 2005-01-07Re:11.接下来我们把我们要播放的VT文件Import到VC++中的ResourceView中去.确定你的Res资源类型.只看该作者 小中大

19楼 发表于: 2005-01-07Re:如图只看该作者 小中大

图片: 20楼 发表于: 2005-01-07Re:如图只看该作者 小中大

图片:

21楼 发表于: 2005-01-07Re:12.你可以看到你的VT文件已经到导入进来了.只看该作者 小中大

22楼 发表于: 2005-01-07Re:如图:只看该作者 小中大

图片:

23楼 发表于: 2005-01-07Re:只看该作者 小中大 13.接下来我和大家说一下播放VT文件的思路:我们需要播放VT时,我们可以把VC++中的VT资源导出来生成一个临时文件,然后让Player而播放即可,播放结束我们在用程序把它删除.24楼 发表于: 2005-01-07Re:14.编辑InitInstance()函数接口,把 FileName变成全局变量.//注释掉这一行char FileName[512]="";把这段变量声明放到对应文件的开始部分.只看该作者 小中大

25楼 发表于: 2005-01-07Re:15.继续编辑InitInstance()函数,在SetCursor(:CString Type="VIRTOOL";HRSRC rest=FindResource(NULL,MAKEINTRESOURCE(IDR_VIRTOOL1),Type);HGLOBAL gl=LoadResource (NULL,rest);LPVOID lp=LockResource(gl); //返回指向资源内存的地址的指针。lstrcpyn(FileName,"c:",512);HANDLE fp;fp= CreateFile(FileName ,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);DWORD a; //sizeofResource 得到资源文件的大小if (!WriteFile (fp,lp,SizeofResource (NULL,rest),&a,NULL))return false;CloseHandle (fp); //关闭句柄FreeResource (gl); //释放内存oadCursor(NULL,IDC_ARROW));这一行下边加入导出VT临时文件的Code:只看该作者 小中大

你可以看到我把VT的临时文件放到了C:目录下.你可以任意修改目录到任何地方.26楼 发表于: 2005-01-07Re:16.实现Exit时删除临时文件:修改void ExitVirtoolsPlayer()函数,加入这一行代码到PostQuitMessage(0);这一行的前边:DeleteFile(FileName);只看该作者 小中大

27楼 发表于: 2005-01-07Re:有问题大家可以提出来,我把我的框架文件放上来:只看该作者 小中大

28楼 发表于: 2005-01-07只看该作者 小中大 Re:框架文件你可能要自己导入VMO资源文件,Type的名字文件中是"VIRTOOL",ID为IDR_VIRTOOL1,请注意要根据实际情况进行修改。说明:我这个框架文件是基于 VT3.0 SDK开发的,如果你用VT SDK是3.08版的话,编译会出现使问题。因为3.08的Lib已经更新了(比如Mp3ReaderLib已经合并到WavReaderLib了等等...)附件: 封装 (63 K) 下载次数:530只看该作者 小中大

29楼 发表于: 2005-01-07Re:该站的处女帖 给你~30楼 发表于: 2005-01-07Re:十分感谢Media/好详细/不过有个疑问~/我生成的时候`/他提示少请问VT是否有这个库呢~/还有那个MSSDK要在哪下呀~/刚去MS官方找半天也没见到只看该作者 小中大

31楼 发表于: 2005-01-08Re:不错唷..趕快來试试看多谢大大分享这教程只看该作者 小中大

32楼 发表于: 2005-01-10Re:引用只看该作者 小中大

yty: Re:封装VT文件到一个EXE文件中的方法十分感谢Media/好详细/不过有个疑问~/我生成的时候`/他提示少请问VT是否有这个库呢~/还有那个MSSDK要在哪下呀~/刚去MS官方找半天也没见到你是不是写错了,VT的SDK中没有这个库文件的,倒是有DK是DirectX8 SDK的安装目录33楼 发表于: 2005-01-10Re:只看该作者 小中大

我打开了你的文件,有些问题,你上面说的关于修改debug和release目录,是不是指这个对话框,但是,目录怎么改啊,好象没有路径啊,还有我在输入时type的是virtool,id也是象你那样设置的,但我点击那个叹号(应该是输出的命令吧)就出现下面的错误,怎么办图片: 34楼 发表于: 2005-01-10Re:这个是输出以后错误提示只看该作者 小中大

图片:

35楼 发表于: 2005-01-10Re:看你的错误提示,我提供给你的框架文件是基于VT3.0 SDK开发的,你的VT可能已经升级了,所以编译会出错。只看该作者 小中大

36楼 发表于: 2005-01-10Re:只看该作者 小中大

补充:你可以减小你的Exe文件的大小,因为这里是静态编译文件的,如果不需要的库,你可以在InitInstance()接口中去掉它的连接如图:37楼 发表于: 2005-01-11Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法你是不是写错了,VT的SDK中没有这个库文件的,倒是有~/ThankYou~/Media:我没有写错~/是那个名字/我也感到奇怪/后来我把卸掉装了Vc6/就都没有问题了/这篇真是太详细全面的教程了/另外Media能否在说下/vmo转cmo的小程序该怎么用SDK生成啊/具体连接在着//32&id=38731&star=1&skin=038楼 发表于: 2005-01-11Re:不是吧,只有我么苯,我又有问题了,没啥说的,只有感谢帮助我的人了media,我按着你说的把那删掉了,果然没有那个问题了,可新问题有产生了,我知道问题在哪,可不知道怎么解决......只看该作者 小中大

图片:

39楼 发表于: 2005-01-11Re:引用只看该作者 小中大

cl781121: Re:封装VT文件到一个EXE文件中的方法不是吧,只有我么苯,我又有问题了,没啥说的,只有感谢帮助我的人了media,我按着你说的把那删掉了,果然没有那个问题了,可新问题有产生了,我知道问题在哪,可不知道怎么解决......请把afxRes.h文件包含到你的资源头文件Resource.h中40楼 发表于: 2005-01-11Re:引用只看该作者 小中大

yty: Re:封装VT文件到一个EXE文件中的方法~/ThankYou~/Media:我没有写错~/是那个名字/我也感到奇怪/我看了一下,这个问题和VC++的版本没关系,你可以看一下这段Code:// virtools base libraries#if defined(_DEBUG)#pragma comment(lib,"ZLibStaticMTD")#pragma comment(lib,"VxMathLibd")#pragma comment(lib,"CK2LibD")...#else#pragma comment(lib,"ZLibStaticMT")#pragma comment(lib,"VxMathLib")#pragma comment(lib,"CK2Lib")...#endif // _DEBUG"VxMathLibd"等一些调试用到的Lib,在SDK中是没有提供给我们,如果你选择DeBug(#if defined(_DEBUG))你的程序,他就会报错找不到相应的库.你选择Release模式发布的话就没问题了,它联接另一些库.在VC++6.0中你可以在Builder-->Batch Builder选择你的编译模式41楼 发表于: 2005-01-11Re:楼主的贴子对我们VT爱好者太有帮助了!个人觉得VT公司在这方面做的很不够!小弟按照楼主的指导做了一下发现还是有几个问题∶1、如果在vt的场景中用到shader的话,输出的 .exe 文件就不能正常播放,只会出现一个黑屏。2、如果我把DirectX SDK升级到最新版本的话,输出程序编译时将会出错。(下面是我做编译时遇到问题的截图)[img][/img]希望楼主能在百忙之中帮我看一下这两个问题,在下感激不尽。只看该作者 小中大

图片: 42楼 发表于: 2005-01-11Re:只看该作者 小中大

VT 中使用shader,我这里播放没有任何错误.如果你在InitInstance()接口中如果加入注册其他的库函数比如"RegisterShaderBehaviors(pm)",那就要注意,不能用Virtools3.08 SDK的否则就会出现你上边的错误.我已经测试过了,在VT3.0 SDK+DirectX9.0b SDK+VC++6.0编译的Exe中运行那个人头的Shader,没有任何问题的.如下图:VT的SDK对最新版的DirectX9 SDK支持不好,编译时会提示"() : error LNK2001: unresolved external symbol __aulldvrm"编译错误.主要原因是The application was compiled against and will only work with D3D_SDK_VERSION (30)43楼 发表于: 2005-01-11Re:估计是版本的问题,我的就是3.08的sdk,不知道media老兄何时弄个3.08版本的框架文件出来。。。。。。只看该作者 小中大

44楼 发表于: 2005-01-11Re:支持Media 好贴 顶一下只看该作者 小中大

45楼 发表于: 2005-01-12Re:只看该作者 小中大

下面是我按照楼主的帖子做的例子,我现在用的版本是3.0.0.29,可对于含有shader例子还是不能播放,希望楼主和各位高手给与指正,小弟谢谢大家![code][/code]附件: Standalone (215 K) 下载次数:165只看该作者 小中大

46楼 发表于: 2005-01-12Re:引用tony0424: Re:封装VT文件到一个EXE文件中的方法下面是我按照楼主的帖子做的例子,我现在用的版本是3.0.0.29,可对于含有shader例子还是不能播放,希望楼主和各位高手给与指正,小弟谢谢大家![code][/code]你的文件有问题,解压不了的47楼 发表于: 2005-01-12Re:不好意思,这个是我要播放的资源文件。

只看该作者 小中大

附件: (464 K) 下载次数:167只看该作者 小中大

48楼 发表于: 2005-01-12Re:那我再发一次,搂主辛苦了!附件: Standalone (515 K) 下载次数:180只看该作者 小中大

49楼 发表于: 2005-01-12Re:引用tony0424: Re:封装VT文件到一个EXE文件中的方法不好意思,这个是我要播放的资源文件。

我测试过了,一切正常。50楼 发表于: 2005-01-12Re:我的virtools dev版本号为:3.0.029 DirectX 的版本号为:DirectX 9.0c (4.09.0000.0904)敢问楼主的版本号是多少?只看该作者 小中大

51楼 发表于: 2005-01-12Re:引用只看该作者 小中大

tony0424: Re:封装VT文件到一个EXE文件中的方法我的virtools dev版本号为:3.0.029 DirectX 的版本号为:DirectX 9.0c (4.09.0000.0904)敢问楼主的版本号是多少?我的版本跟你的一样,你的框架框架文件有问题。有时间我帮你改一下52楼 发表于: 2005-01-12Re:谢谢楼主!只看该作者 小中大

53楼 发表于: 2005-01-12Re:只看该作者 小中大

我把框架文件做了一点点修改,就是注释掉“RegisterPhysicsBehaviors(pm);”这行后(下图1),文件输出成功,但是没有了shader效果(下图2)。图片:

54楼 发表于: 2005-01-12Re:图1[img][/img]只看该作者 小中大

图片: 55楼 发表于: 2005-01-12Re:图2[img][/img]只看该作者 小中大

图片:

56楼 发表于: 2005-01-12Re:难道vt和directx sdk都不能随便升级?真惨啊!只看该作者 小中大

57楼 发表于: 2005-01-12Re:只看该作者 小中大

media 你的框架设置成双击直接进入全屏,不能改盘符,也就是说我如果输出在exe在c:盘,但拷贝到别的盘符下就不行了,是不是我做错了有时间你试一试吧58楼 发表于: 2005-01-12Re:只看该作者 小中大 还有个小问题,怎样编辑图标呢??59楼 发表于: 2005-01-12Re:楼主我就用你的那个文件,IMPORT了自己的VMO文件,然后生成EXE,就出现下面的问题~~为什么啊??--------------------Configuration: NewPlayerStatic - Win32 只看该作者 小中大

C:Documents and 桌面封装EXEStandalone (63): error RC2104 : undefined keyword or key name: IDC_STATICError executing - 1 error(s), 0 warning(s)The following environment variables were not found$(NEMORDIR)60楼 发表于: 2005-01-12Re:引用只看该作者 小中大

cl781121: Re:封装VT文件到一个EXE文件中的方法media 你的框架设置成双击直接进入全屏,不能改盘符,也就是说我如果输出在exe在c:盘,但拷贝到别的盘符下就不行了,是不是我做错了有时间你试一试吧我框架中的BOOL g_GoFullScreen=FALSE; // Go directly to fullscreen没有设置为直接全屏播放呀.你再看看Exe的文件中的VT文件释放到C:目录下的,当播放结束时,这个文件会被删除的.你在C:目录下找到的编译的ExE,是由于环境变量没有注册才会编译到C:下的.你可以在VC++中的Project--->Setting-->Link中把Out FileName设置为"..".来确定编译的ExE文件的正确路径61楼 发表于: 2005-01-12Re:引用只看该作者 小中大

cl781121: Re:封装VT文件到一个EXE文件中的方法还有个小问题,怎样编辑图标呢??把Resouce中的ICON替换掉就可以了:62楼 发表于: 2005-01-12Re:引用只看该作者 小中大

cl781121: Re:封装VT文件到一个EXE文件中的方法还有个小问题,怎样编辑图标呢??如图,图片: 63楼 发表于: 2005-01-12Re:引用只看该作者 小中大

w56373511: Re:封装VT文件到一个EXE文件中的方法楼主我就用你的那个文件,IMPORT了自己的VMO文件,然后生成EXE,就出现下面的问题~~为什么啊??--------------------Configuration: NewPlayerStatic - Win32 C:Documents and 桌面封装EXEStandalone (63): error RC2104 : undefined keyword or key

name: IDC_STATIC把#include这一句加入到Resouce.h中即可64楼 发表于: 2005-01-12Re:老大是这句话吗?#include只看该作者 小中大

可是现在有八个错误了~~~怎么办啊?--------------------Configuration: NewPlayerStatic - () : error LNK2005: _IID_IDirectDrawSurface3 already defined in ()() : error LNK2005: _IID_IDirectDraw2 already defined in ()() : error LNK2005: _IID_IDirect3DMMXDevice already defined in ()() : error LNK2005: _IID_IDirect3DHALDevice already defined in ()() : error LNK2005: _IID_IDirect3DRGBDevice already defined in ()() : error LNK2001: unresolved external symbol _CLSID_() : error LNK2001: unresolved external symbol _IID_ : fatal error LNK1120: 2 unresolved externalsError executing - 8 error(s), 0 warning(s)The following environment variables were not found$(NEMORDIR)你要保证在VC++你的DirectX的Lib引用目录在最上边.一应要在C:Program FilesMicrosoft Visual StudioVC98LIB的上边.65楼 发表于: 2005-01-12Re:没出错~~我哭了~~~~谢谢老大~不过为什么是黑屏,我IMPROT的VMO没有显示~为什么?我一点都不懂程序,问题很幼稚~老大不要见怪~只看该作者 小中大

66楼 发表于: 2005-01-12Re:引用只看该作者 小中大

w56373511: Re:封装VT文件到一个EXE文件中的方法没出错~~我哭了~~~~谢谢老大~不过为什么是黑屏,我IMPROT的VMO没有显示~为什么?我一点都不懂程序,问题很幼稚~老大不要见怪~黑屏的话就是输出的文件不对,HRSRC rest=FindResource(NULL,MAKEINTRESOURCE(IDR_VIRTOOL1),Type);在我的框架文件中VMO资源的ID我设置为"IDR_VIRTOOL1",你看一下你的资源文件ID是不是和我的不一样67楼 发表于: 2005-01-12Re:引用只看该作者 小中大

tony0424: Re:封装VT文件到一个EXE文件中的方法下面是我按照楼主的帖子做的例子,我现在用的版本是3.0.0.29,可对于含有shader例子还是不能播放,希望楼主和各位高手给与指正,小弟谢谢大家![code][/code]楼主能不能详细回答一下上面这个问题,比如说指出我框架的错误,感激不尽!68楼 发表于: 2005-01-12Re:谢谢~~我的ID错了~~~现在成功了~~实在太感谢了~~我是在别的网站上看到的转贴那个人遗漏了很多,我搞了半天都搞不对,还是楼主最强顶~~~~~希望楼主能推出支持最新版本的封装方法(我比较笨,为了实现你的方法,重装了老版本)

只看该作者 小中大

69楼 发表于: 2005-01-12Re:media ,可是它要求的是*.ico文件,我想把我的jpg图片转化为ico,可。。。。怎么转啊????只看该作者 小中大 70楼 发表于: 2005-01-12Re:exe文件损坏了!!!!media,看看你上传的文件吧只看该作者 小中大

71楼 发表于: 2005-01-12Re:引用只看该作者 小中大

tony0424: Re:封装VT文件到一个EXE文件中的方法楼主能不能详细回答一下上面这个问题,比如说指出我框架的错误,感激不尽![/quote]Last Modification : 15/07/2001你用的框架文件太老了72楼 发表于: 2005-01-12Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法我框架中的BOOL g_GoFullScreen=FALSE; // Go directly to fullscreen没有设置为直接全屏播放呀.你再看看Exe的文件中的VT文件释放到C:目录下的,当播放结束时,这个文件会被删除的.你在C:目录下找到的编译的ExE,是由于环境变量没有注册才会编译到C:下的.你可以在VC++中的Project--->Setting-->Link中把Out FileName设置为"..".来确定编译的ExE文件的正确路径现在的问题是,我只要这样设置BOOL g_GoFullScreen=FALSE; // Go directly to fullscreen拷贝到别的盘符下都可以,但一但我BOOL g_GoFullScreen=TRUE; // Go directly to fullscreen拷贝到别的盘符下就不行

73楼 发表于: 2005-01-12Re:既然楼主说我用的框架文件太老了,那我应该升级VT到最新版本喽!最好升级到哪个版本?还望指条明路!只看该作者 小中大

74楼 发表于: 2005-01-13Re:media,这个能不能去掉???

只看该作者 小中大 图片:

75楼 发表于: 2005-01-13Re:引用只看该作者 小中大

tony0424: Re:封装VT文件到一个EXE文件中的方法既然楼主说我用的框架文件太老了,那我应该升级VT到最新版本喽!最好升级到哪个版本?还望指条明路!如果你要把编译进EXE文件中,不能用3.08的SDK(因为SDK中这个库有问题),3.0和3.05的都可以.你可以以动态链接的形式来实现Shader的效果.在SDK中生成一个Shader动态调用用到的.lib文件,静态编译的时候不要把编译进去(RegisterShaderBehaviors(pm);),把你生成的.lib文件加到你的框架文件中编译进行动态链接,不过这样的话,就是运行时你必须提供给用户那个DLL文件

76楼 发表于: 2005-01-13Re:引用只看该作者 小中大

cl781121: Re:封装VT文件到一个EXE文件中的方法media,这个能不能去掉???

当然可以,你编辑字符段资源即可.77楼 发表于: 2005-01-13Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法当然可以,你编辑字符段资源即可.搞定!呵呵,删掉版本号就好了,能不能帮我看看上面的帖子啊,尤其是那个全屏的问题,我哪里都没有调,只把你说的路径改为d盘然后flase 改成了true,就不行了,帮我看看啊,截图为证

图片:

78楼 发表于: 2005-01-13Re:引用只看该作者 小中大

cl781121: Re:封装VT文件到一个EXE文件中的方法搞定!呵呵,删掉版本号就好了,能不能帮我看看上面的帖子啊,尤其是那个全屏的问题,我哪里都没有调,只把flase 改成了true,就不行了,帮我看看啊在InitInstance()接口中注释掉这几行Code:if (g_GoFullScreen && strlen(FileName)<=0){

MessageBox(NULL,"No ","Virtools Player Error",MB_ICONEXCLAMATION|MB_OK);return FALSE;}因为这时候后我们的FileName指针变量指向为空:strlen(FileName)=079楼 发表于: 2005-01-13Re:引用只看该作者 小中大

tony0424: Re:封装VT文件到一个EXE文件中的方法那我再发一次,搂主辛苦了!给你改了一下编译没有问题,Shader可以编译进去,不过是3.0的,不是3.08的附件: Standalone (538 K) 下载次数:9180楼 发表于: 2005-01-13Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法如果你要把编译进EXE文件中,不能用3.08的SDK(因为SDK中这个库有问题),3.0和3.05的都可以.你可以以动态链接的形式来实现Shader的效果.在SDK中生成一个Shader动态调用用到的.lib文件,静态编译的时候不要把编译进去(RegisterShaderBehaviors(pm);),把你生成的.lib文件加到你的框架文件中编译进行动态链接,不过这样的话,就是运行时你必须提供给用户那个DLL文件

感谢楼主解答,可是小弟还是听得不太明白,恳请楼主再讲具体一点!

81楼 发表于: 2005-01-13Re:引用只看该作者 小中大

tony0424: Re:封装VT文件到一个EXE文件中的方法感谢楼主解答,可是小弟还是听得不太明白,恳请楼主再讲具体一点!

你看一下“动态链接”方面的知识就知道我的意思了

82楼 发表于: 2005-01-13Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法你看一下“动态链接”方面的知识就知道我的意思了

对不起,我试了一下,完全用动态链接的话知道该怎么做,但是只给shader做动态链接,其它的用静态,我就不知怎么做了,看来还得麻烦楼主指点了!

83楼 发表于: 2005-01-13Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法在InitInstance()接口中注释掉这几行Code:if (g_GoFullScreen && strlen(FileName)<=0){谢谢,解决了

84楼 发表于: 2005-01-13Re:这是我做的例子,不理解为什么会出现如下面的情况,标题栏下面显示“Directx 9 required”,shader效果还是有问题,哪位大哥能帮我解答只看该作者 小中大

图片:

85楼 发表于: 2005-01-13Re:正确的应该是下面这样的,这是从官方网站下的例子:只看该作者 小中大

图片: 86楼 发表于: 2005-01-13Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法10.把头文件"afxRes.h"包到Resource.h文件中去.在Resource.h中加入这一行:#include请问楼主为什么要“把头文件"afxRes.h"包到Resource.h文件中去”,这样做的目的是什么?87楼 发表于: 2005-01-14Re:只看该作者 小中大

它的作用适合于所有应用程序的一些通用MFC库资源包含进来,因为我们要编辑的对话框、字符串等资源不是由AppWizard生成的。88楼 发表于: 2005-01-14Re:只看该作者 小中大

这是小弟改的框架,目的是用动态链接的形式来实现Shader的效果,其它的还是用静态链接,有一定效果,但还是有点不对劲,希望楼主和各位大哥多家批评指正!

附件: Standalone (51 K) 下载次数:8389楼 发表于: 2005-01-14Re:已经可以了:动态链接可以实现,不过你的实现方法不对.你要编辑SDK下边的Shader框架文件,生成它的Lib文件.只看该作者 小中大

注意:MSDN上的DirectX9.0C SDK是基于.net框架的,你如果用VC6当然会编译有错误了.你去下一个extras,我现在用的是VC6+VT3.08 SDK+DirectX9.0C SDK(是DirectX9.0b通过extras升级).VT中所有的Shader效果已经在静态编译的EXE中全部支持了90楼 发表于: 2005-01-14Re:如图只看该作者 小中大

图片:

91楼 发表于: 2005-01-14Re:大哥!怎么做的?能让我看看框架吗?只看该作者 小中大

92楼 发表于: 2005-01-14Re:感谢!只看该作者 小中大

93楼 发表于: 2005-01-14Re:Shader中的特殊效果必须要用DirectX9.0C SDK编译平台.你可以去官方网站去查一下.只看该作者 小中大

VT3.08 SDK对DirectX9.0C SDK完全支持.94楼 发表于: 2005-01-14Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法Shader中的特殊效果必须要用DirectX9.0C SDK编译平台.你可以去官方网站去查一下.VT3.08 SDK对DirectX9.0C SDK完全支持.我太笨了!楼主的意思还是版本的问题?我到官方网站具体看哪方面内容啊?

95楼 发表于: 2005-01-15Re:想请教一下 我怎麽会有以下讯息--------------------Configuration: NewPlayer - Win32 LINK : fatal error LNK1181: cannot open input file ""Error executing .只看该作者 小中大

- 1 error(s), 0 warning(s)The following environment variables were not found$(NEMORDIR)96楼 发表于: 2005-01-17Re:引用只看该作者 小中大

dhimimi: Re:封装VT文件到一个EXE文件中的方法想请教一下 我怎麽会有以下讯息--------------------Configuration: NewPlayer - Win32 提示找不到相应的库文件,你要把SDKStaticLib目录添加到VC的Directories中,方法参见前边的帖子97楼 发表于: 2005-01-17Re:只看该作者 小中大 引用Media: Re:封装VT文件到一个EXE文件中的方法已经可以了:动态链接可以实现,不过你的实现方法不对.你要编辑SDK下边的Shader框架文件,生成它的Lib文件.注意:MSDN上的DirectX9.0C SDK是基于.net框架的,你如果用VC6当然会编译有错误了.你去下一个extras,我现在用的是VC6+VT3.08 SDK+DirectX9.0C SDK(是DirectX9.0b通过extras升级).VT中所有的Shader效果已经在静态编译的EXE中全部支持了楼主我的SDK的版本还是有问题,我的系统现在装的是windows xp sp2,我不知道现在该安装哪个版本的sdk,楼主能跟我具体说一下吗?谢谢!98楼 发表于: 2005-01-17Re:DirectX9.0b SDK用dxsdk_oct2004_extras升级到DirectX9.0C SDK只看该作者 小中大

99楼 发表于: 2005-01-17Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法DirectX9.0b SDK用dxsdk_oct2004_extras升级到DirectX9.0C SDK我按照楼主说的DirectX9.0b SDK用dxsdk_oct2004_extras升级到DirectX9.0C SDK后,在编辑SDK下边的Shader框架文件,生成它的Lib文件时出现如下错误∶E:Program FilesVirtoolsVirtools Dev (57) : error C2039: 'BeginPass' : is not a member of 'ID3DXEffect'C:DXSDKINCLUDEd3dx9effect.h(260) : see declaration of 'ID3DXEffect'E:Program FilesVirtoolsVirtools Dev (65) : error C2039: 'EndPass' : is not a member

of 'ID3DXEffect'C:DXSDKINCLUDEd3dx9effect.h(260) : see declaration of 'ID3DXEffect'E:Program FilesVirtoolsVirtools Dev (74) : error C2039: 'CommitChanges' : is not a

member of 'ID3DXEffect'C:DXSDKINCLUDEd3dx9effect.h(260) : see declaration of 'ID3DXEffect'E:Program FilesVirtoolsVirtools Dev (946) : error C2065: 'LPD3DXTEXTURESHADER' : undeclared identifierE:Program FilesVirtoolsVirtools Dev (946) : error C2146: syntax error : missing ';' before identifier 'pTextureShader'E:Program FilesVirtoolsVirtools Dev (946) : error C2065: 'pTextureShader' : undeclared identifierE:Program FilesVirtoolsVirtools Dev (961) : error C2065: 'D3DXCreateTextureShader' : undeclared identifierE:Program FilesVirtoolsVirtools Dev (986) : error C2227: left of '->SetDefaults' must

point to class/struct/unionE:Program FilesVirtoolsVirtools Dev (1030) : error C2227: left of '->Release' must point to class/struct/unionE:Program FilesVirtoolsVirtools Dev (1236) : error C2039: 'pVertexShaderFunction' :

is not a member of '_D3DXPASS_DESC'C:DXSDKINCLUDEd3dx9effect.h(102) : see declaration of '_D3DXPASS_DESC'E:Program FilesVirtoolsVirtools Dev (1236) : error C2039: 'pVertexShaderFunction' :

is not a member of '_D3DXPASS_DESC'C:DXSDKINCLUDEd3dx9effect.h(102) : see declaration of '_D3DXPASS_DESC'E:Program FilesVirtoolsVirtools Dev (1237) : error C2039: 'pPixelShaderFunction' : isnot a member of '_D3DXPASS_DESC'C:DXSDKINCLUDEd3dx9effect.h(102) : see declaration of '_D3DXPASS_DESC'E:Program FilesVirtoolsVirtools Dev (1237) : error C2039: 'pPixelShaderFunction' : isnot a member of '_D3DXPASS_DESC'C:DXSDKINCLUDEd3dx9effect.h(102) : see declaration of '_D3DXPASS_DESC'E:Program FilesVirtoolsVirtools Dev (1244) : error C2039: 'pVertexShaderFunction' :

is not a member of '_D3DXPASS_DESC'C:DXSDKINCLUDEd3dx9effect.h(102) : see declaration of '_D3DXPASS_DESC'Error executing - 14 error(s), 0 warning(s)如果我用DirectX 9.0 SDK Update - (October 2004)和dxsdk_oct2004_extras升级的,在编辑SDK下边的Shader框架文件,生成它的Lib文件时则不会出错,但是shader效果还是有问题。 100楼 发表于: 2005-01-17Re:楼主帮忙看看是什么问题只看该作者 小中大

101楼 发表于: 2005-01-17Re:引用只看该作者 小中大

tony0424: Re:封装VT文件到一个EXE文件中的方法我按照楼主说的DirectX9.0b SDK用dxsdk_oct2004_extras升级到DirectX9.0C SDK后,在编辑SDK下边的Shader框架文件,生成它的Lib文件时出现如下错误∶E:Program FilesVirtoolsVirtools Dev (57) : error C2039: 'BeginPass' : is not a

member of 'ID3DXEffect'C:DXSDKINCLUDEd3dx9effect.h(260) : see declaration of 'ID3DXEffect'这是提示Lib中Function和头文件中declare的不一致,保证你的Inlude文件是DirectX9.0b SDK的102楼 发表于: 2005-01-17Re:我安装的是DirectX9.0b SDK只看该作者 小中大

103楼 发表于: 2005-01-17Re:文件的日期都是2002年的只看该作者 小中大

104楼 发表于: 2005-01-17Re:还是不能解决啊!只看该作者 小中大

105楼 发表于: 2005-01-17Re:引用只看该作者 小中大

tony0424: Re:封装VT文件到一个EXE文件中的方法文件的日期都是2002年的你的头文件根本就不是DirectX9.0b的,你要升级.我给你一个inlclude升级包 附件: (52 K) 下载次数:108只看该作者 小中大

106楼 发表于: 2005-01-18Re:引用Media: Re:封装VT文件到一个EXE文件中的方法你的头文件根本就不是DirectX9.0b的,你要升级.我给你一个inlclude升级包

我按照你说的做了,但还是有问题啊!楼主的directx sdk到底是哪个版本啊!我在网上也没找着头文件是2003年2月16日的版本啊!

107楼 发表于: 2005-01-18Re:你看看框架文件,我用的是DirectX9.0C+Virtools3.08SDK,这个框架文件是基于你提供的文件修改的.

只看该作者 小中大

附件: Standalone (68 K) 下载次数:110只看该作者 小中大

108楼 发表于: 2005-01-18Re:我现在可以做到直接进入全屏,可没有初始化了,我想让初始化按键存在于全屏当中,怎么弄啊109楼 发表于: 2005-01-18Re:引用只看该作者 小中大

cl781121: Re:封装VT文件到一个EXE文件中的方法我现在可以做到直接进入全屏,可没有初始化了,我想让初始化按键存在于全屏当中,怎么弄啊什么没有初始化?你是说黑屏,生成的大小为0K?110楼 发表于: 2005-01-18Re:就是vt里的着个东西只看该作者 小中大

图片:

111楼 发表于: 2005-01-18Re:引用只看该作者 小中大

cl781121: Re:封装VT文件到一个EXE文件中的方法就是vt里的着个东西这个和框架文件没关系,和要播放VT文件有关系112楼 发表于: 2005-01-18Re:--------------------Configuration: NewPlayerStatic - () : error LNK2001: unresolved external symbol ___security_() : error LNK2001: unresolved external symbol ___security_() : error LNK2001: unresolved external symbol ___security_() : error LNK2001: unresolved external symbol ___security_() : error LNK2001: unresolved external symbol ___security_() : error LNK2001: unresolved external symbol ___security_() : error LNK2001: unresolved external symbol ___security_cookie只看该作者 小中大

……此处省去100行…… : fatal error LNK1120: 3 unresolved externalsError executing - 111 error(s), 0 warning(s)The following environment variables were not found$(NEMORDIR)这是什么毛病啊?各位大虾帮帮忙:~(113楼 发表于: 2005-01-18Re:只看该作者 小中大

你安装的DirectX9.0C SDK对应的应该是开发环境的,而你在VC6编译就会出错.你查看一下前边的帖子,就知道就决办法了 114楼 发表于: 2005-01-18Re:如果有自己自定义的BB/该加入哪里呢~/只看该作者 小中大

115楼 发表于: 2005-01-18Re:磕磕碰碰终于走到了最后一步,但是问题又出现了:(--------------------Configuration: NewPlayerStatic - Win32 E:VT_EXEStandalone (68): error RC2104 : undefined keyword or key name: IDC_STATICError executing .只看该作者 小中大

- 1 error(s), 0 warning(s)The following environment variables were not found$(NEMORDIR)有劳搂主了116楼 发表于: 2005-01-19Re:查看前边的帖子,可以找到解决办法...

只看该作者 小中大

117楼 发表于: 2005-01-19Re:终于搞掂了!谢谢楼主以及各位大虾!!!!只看该作者 小中大

118楼 发表于: 2005-01-19Re:问一个问题/是不是如果不把vmo释放出来就不能正常播放呢~/只看该作者 小中大

119楼 发表于: 2005-01-21Re:这里我们播放VT文件是使用Load(Char * Filename),它不支持直接播放资源中的二进制文件。只看该作者 小中大 120楼 发表于: 2005-01-21Re:我是按楼主说的去做的啊,,,可我生成exe的时候出了问题,,,下面是提示,,请楼言指教,,,谢谢...只看该作者 小中大

--------------------Configuration: NewPlayerStatic - LINK : fatal error LNK1181: cannot open input file ""Error executing - 1 error(s), 0 warning(s)The following environment variables were not found$(NEMORDIR)$(NEMORDIR)这个环境变量是什么意思啊,,为什么没有找到..还有不能打开""是什么意思啊...121楼 发表于: 2005-01-21Re:只看该作者 小中大

提示NEMORDIR环境变量没有在系统中注册。库找不到,你要确定在VC中设置的搜索路径是否正确。请仔细阅读前边的帖子。

122楼 发表于: 2005-01-21Re:楼言谢谢你的讲解...我现在生成的播放器已经可以打开vmo文件了,,可是一导入后就停在第一帧画面就不再运行了,,我用IE播放是可以播放的...只看该作者 小中大

还有一个问题我看到一个也是讲解怎么样生成exe的,,它用的方法不是把vmo文件用当做一个资源导入面是用 sprintf(FileName,"%s%s%s",drive,dir,"" );语句来导入,,,,请问楼言主这个涵数的意义,,123楼 发表于: 2005-01-21Re:只看该作者 小中大

其实你仔细分析,这个Load(Char* str)函数是导入VT文件到播放器中,而我讲的导入资源文件到VC框架文件去,是为了封装。如果那照我讲的步骤做的话,可以直接播放VT文件的。你可以这样,用那个去掉按钮和鼠标相应之前那个播放器播放一下你的文件,看看是否正常。Write formatted data to a

sprintf( char *buffer, const char *format [, argument] ... );sprintf(FileName,"%s%s%s",drive,dir,"" );不是导入文件的意思,是给字符串赋值

。你要想研究明白框架文件,建议你学习一下C++语言。。。 124楼 发表于: 2005-01-21Re:问题是我现在只生成一个播放器,,什么也不改,,都不能正常播放,,只能停在第一帧..好让人头痛啊,,,辛苦版主了,,,只看该作者 小中大

C++好想学啊,,可是太让人头痛了,,,125楼 发表于: 2005-01-22Re:为什么我把这一句BOOL g_GoFullScreen=FALSE;// Go directly to fullscreen改为TURE全屏运行以后,退出时会报以上错误?只看该作者 小中大

图片:Untitled-1

126楼 发表于: 2005-01-24Re:只看该作者 小中大

老大啊,,为什么我弄么这么久没还有弄出来,昨天把卸了,,装了vc6,,版主的模版文件编译没有问题可以生成播放器,然后我按版主说的导入vmo文件,,导入成功后,生成的exe一版黑屏,不能播放我导入的文件,在C盘可以看到临时文件大小为0。版主帮帮忙吧,,,127楼 发表于: 2005-01-24Re:引用只看该作者 小中大

am8888: Re:封装VT文件到一个EXE文件中的方法老大啊,,为什么我弄么这么久没还有弄出来,昨天把卸了,,装了vc6,,版主的模版文件编译没有问题可以生成播放器,然后我按版主说的导入vmo文件,,导入成功后,生成的exe一版黑屏,不能播放我导入的文件,在C盘可以看到临时文件大小为0。版主帮帮忙吧,,,生成的Temp文件为0,是由于你导入的资源文件的Type或ID和我程序中指定的不一样.请你仔细检查你的资源文件.128楼 发表于: 2005-01-25Re:运行全屏,退出时为什么会报错啊??只看该作者 小中大 129楼 发表于: 2005-01-26Re:引用只看该作者 小中大

ogailuo: Re:封装VT文件到一个EXE文件中的方法运行全屏,退出时为什么会报错啊??图片:退出.jpg 130楼 发表于: 2005-01-26Re:引用只看该作者 小中大

ogailuo: Re:封装VT文件到一个EXE文件中的方法我想问一下你是怎样退出的,直接按“ESC” 么??131楼 发表于: 2005-01-27Re:引用只看该作者 小中大

我想问一下你是怎样退出的,直接按“ESC” 么??是的,我直接按的ESC,在全屏的状态下没有标题栏,我不直接按ESC就退不出去呀132楼 发表于: 2005-01-27Re:只看该作者 小中大

这个提示是内存报错。你仔细检查,不在全屏的时候是否有这种情况。再看看是不是菜单上下文你做了修改或是窗体标题栏重绘你做了不该做的修改。133楼 发表于: 2005-01-27Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法这个提示是内存报错。你仔细检查,不在全屏的时候是否有这种情况。再看看是不是菜单上下文你做了修改或是窗体标题栏重绘你做了不该做的修改。清空TempDebug目录之后,打开全新的框架文件,不做其它任何修改,直接改进全屏,右键失效,按ESC之后故障依旧。非全屏很正常134楼 发表于: 2005-01-27Re:还有一个问题,我把自己做的VMO编译成exe运行时,显示的是一个正交视图而不是照相机视图,编译网上下载的vmo一切正常。是不是我的场景做得不对?只看该作者 小中大

班主!百忙之中帮我看看阿!135楼 发表于: 2005-01-27只看该作者 小中大 Re:你的框架文件肯定有问题,if (Key==VK_ESCAPE)

if (TheRenderContext)if (TheRenderContext->IsFullScreen() && !g_DisableSwitch){

OnFullScreen();return 0;}

else ExitVirtoolsPlayer();break;你检查这段代码中对应的函数和变量是否最了修改。实在不行的话,你把你的资源文件去除,把框架文件放上来,我看看136楼 发表于: 2005-01-27Re:大哥怎么改背景和标题栏颜色呢?我不想要外面的黑框和标题栏怎么搞啊?谢谢只看该作者 小中大

137楼 发表于: 2005-01-28Re:问一下,可不可以在全屏状态下还保留相应的按键,比如play、只看该作者 小中大

138楼 发表于: 2005-01-28Re:这些按键是在标题栏上绘制的,全屏状态默认的窗体是没有标题栏的。合理的方法是全屏状态保持上下文菜单。只看该作者 小中大

139楼 发表于: 2005-01-28Re:版主请问一个关于图标的问题??只看该作者 小中大

我把资源文件中VT的图标换成自已的图标,生成exe后,,在平铺查看模式下看到是自已的图标,在详细信息下看到的还是VT的图标,还有运行的时候在任务栏上的图标也是VT的,,请问版主怎样才能把详细信息查看模式下和运行时任务栏上的图标改成自已的呢?140楼 发表于: 2005-01-28Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法你的框架文件肯定有问题,你检查这段代码中对应的函数和变量是否最了修改。实在不行的话,你把你的资源文件去除,把框架文件放上来,我看看出了全屏之外,没有做任何修改……退出时出错附件: VT_ (42 K) 下载次数:57只看该作者 小中大

141楼 发表于: 2005-01-28Re:引用am8888: Re:封装VT文件到一个EXE文件中的方法版主请问一个关于图标的问题??我把资源文件中VT的图标换成自已的图标,生成exe后,,在平铺查看模式下看到是自已的图标,在详细信息下看到的还是VT的图标,还有运行的时候在任务栏上的图标也是VT的,,请问版主怎样才能把详细信息查看模式下和运行时任务栏上的图标改成自已的呢?你只修改了大小为32x32的那个图标,把16x16的也修改一下……图片:

142楼 发表于: 2005-01-28Re:谢谢版主,,这真是一个好帖,,只看该作者 小中大

143楼 发表于: 2005-01-28Re:只看该作者 小中大 引用ogailuo: Re:封装VT文件到一个EXE文件中的方法出了全屏之外,没有做任何修改……退出时出错已经帮你改好了(添加代码之类的,你可以参见前边的帖子)附件: Standalone (55 K) 下载次数:70只看该作者 小中大

144楼 发表于: 2005-01-28Re:引用ogailuo: Re:封装VT文件到一个EXE文件中的方法你只修改了大小为32x32的那个图标,把16x16的也修改一下……改这个就可以了呀145楼 发表于: 2005-01-28Re:引用只看该作者 小中大

Media: Re:封装VT文件到一个EXE文件中的方法提示找不到相应的库文件,你要把SDKStaticLib目录添加到VC的Directories中,方法参见前边的帖子可是我的VC里面并没有Directories>_<"146楼 发表于: 2005-02-01Re:我装的directorx不是装到mssdk资料夹ㄟ是DXSDK那跟你的步骤会有什麽不同吗因为一直卡在我之前问的问题那边找不到Directories只看该作者 小中大

147楼 发表于: 2005-02-01只看该作者 小中大 Re:DXSDK是DirectX9 SDK的默认安装目录。找不到Directories,你是指什么?找不到设置链接库的菜单还是编译的时候错误提示?148楼 发表于: 2005-02-03Re:可是我的directx9 sdk安装时的默认目录不是mssdk 这样会有什麽差别吗另外Directories我找不到设置链接库的菜单>_<"只看该作者 小中大

149楼 发表于: 2005-02-03Re:没有区别,只要你链接正确即可。只看该作者 小中大 150楼 发表于: 2005-02-03Re:Tools-->Options-->Directories只看该作者 小中大

151楼 发表于: 2005-02-04只看该作者 小中大

Re:--------------------Configuration: NewPlayerStatic - LINK : fatal error LNK1181: cannot open input file ""Error executing - 1 error(s), 0 warning(s)The following environment variables were not found$(NEMORDIR)一样有这问题存在搞不懂缺了什麽>_<"图片: 152楼 发表于: 2005-02-04Re:DXSDK的Lib目录一定要在VCMFC的上边。以前的帖子强调过的

只看该作者 小中大

153楼 发表于: 2005-02-04Re:我把dxsdk的lib移到最上面还是一样啦>_<""""""""""""""""""""""""""""""""""""""""只看该作者 小中大

154楼 发表于: 2005-03-02Re:引用只看该作者 小中大

dhimimi: Re:封装VT文件到一个EXE文件中的方法我把dxsdk的lib移到最上面还是一样啦>_<""""""""""""""""""""""""""""""""""""""""