0

关于让 DirectDraw 在 CE5.0 系统上运行的问题,我已经有一段时间了。我终于找到了一些涉及让它在 Windows Moblie 上运行的代码,并且通过一些混乱,我已经正确编译了代码。

它成功地通过创建具有 Windows 窗体句柄的实例来运行,但是当它通过以下方式检查系统的功能时:

DDCAPS halCaps = new DDCAPS(), helCaps = new DDCAPS();
halCaps.dwSize = (uint)Marshal.SizeOf(typeof(DDCAPS));
helCaps.dwSize = halCaps.dwSize;
result = dDraw.GetCaps(out halCaps, out helCaps);

我收到“参数不正确”的异常。如果我对此函数发表评论,我也会在以后的函数中遇到此异常,这使我相信我的 PInvoke 某处存在问题,但我不知道在哪里搜索,因为有关 CE5.0 DirectDraw 的信息似乎非常有限。我目前正在导入我的函数

[DllImport("ddraw.dll", CallingConvention = CallingConvention.Winapi)]

然而,错误似乎只来自接口,这些接口带有类似的东西

[Guid("9c59509a-39bd-11d1-8c4a-00c04fd930c5"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

到目前为止,我一直关注的获得最佳结果的文章(以及我一直使用的代码作为尝试基线的文章)在这里。我的代码曾经是不同的,但我一直在不断地改变,看看我的代码中是否有问题,所以在这一点上它实际上是一样的。

任何关于导致问题的帮助,我应该在哪里通过 CE5.0 查找有关 DirectDraw 的信息,或者关于我做的任何其他严重错误的指针,将不胜感激。

额外信息:我正在使用的设备是一个自定义框架,其中 D3D 不是一个选项,尽管我确实从电路板制造商那里得到了支持 DirectDraw 并且 2d 硬件加速可用的信息,所以这不应该是一个问题。

4

1 回答 1

0

把这个放在这里给其他有类似问题的人。在查看了一段时间的 C++ 代码后,看起来 CE5.0 使用的变量和函数与 6.0+ 不同,因此您必须使用 IDirectDraw4 之类的东西,而不是 IDirectDraw 和 IDirectDrawSurface5,后者必须从 IDirectDrawSurface4 转换。

我希望这对其他有类似问题的人有用。我还没有解决这段代码的所有问题,但它是一个很好的起点。

于 2010-12-07T19:33:32.787 回答