2013-04-11 51 views
2

我做了一个小型游戏,我需要接受一个学校进行一些测试。如何将d3dx9_43.dll打包到我的应用程序中?

不幸的是,作为一个学校系统,我需要打包所有尚未安装的DLL,以便它可以运行。在电脑上安装任何东西都是不可能的。前几天我发现,由于缺少d3dx9_43.dll文件,应用程序无法启动。

我有静态链接我使用过的库,并且很困惑为什么这不包括在内。我引用了我使用的所有Direct3D 9库(或者我认为)。

任何人都可以帮我吗?

我使用Visual Studio C++ 2010和使用的Direct3D 9

回答

1

它应该通过包括应用程序安装程序内的DirectX 9.0的可再发行组件包来完成,但是因为你不能安装任何东西,你要么必须出货所有与您的可执行文件(这是违反SDK许可证)的DLL或静态链接的DirectX运行时(也可能不允许)。

针对DirectX运行时的静态链接不是一个好主意,也不像看起来那么平凡,我甚至不确定它是否存在,但您必须拥有实际的静态库(不是实际链接的库自己反对dll)。

因此,最简单的解决方案是将所有需要的DLL保存在exe文件中,如果您担心丢失一个依赖项,您可以使用Dependency Walker请注意,此解决方案不被SDK许可证所允许,并且不能用于将应用程序实际分发给最终用户。

+0

我真的很担心有人会告诉我!尽管谢谢你的回答。 – Chris 2013-04-11 15:04:32

+0

那么,即使你可以静态链接到运行时,只要将所有的dll与你的游戏一起发布(除非你的游戏只能是一个文件)。 – zakinster 2013-04-11 15:10:25

+0

您不允许运送DLL。你唯一的选择是使用redist包。 – 2013-04-11 15:16:43

2

遵守许可证的唯一选择是安装可再发行组件包。

早期版本的D3DX确实支持静态链接,但出于安全原因,MS更改了禁止静态链接的规则。他们希望能够通过WIndows Update来为这些DLL提供服务,并且只有在使用正式的可再发行组件包进行安装时才有可能。

您的一种可能的选择是查看是否可以避免链接到D3DX。这可能是因为您使用了足够小的库,以避开它。

+0

我会经过并看看。我可能能够更改程序,以便它不依赖于此库。我觉得这样的傻瓜没有意识到这一点,现在,如此接近尾声,我发现困难的方式! – Chris 2013-04-11 15:57:33

相关问题