«Параметр неверен» при попытке использовать PInvoke DirectDraw в WinCE5.0 - PullRequest
0 голосов
/ 02 декабря 2010

У меня некоторое время была проблема с тем, чтобы заставить 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)]

Статья, за которой я следовал, с лучшими результатами (и той, из которой я использовал код в качестве исходной попытки), здесь . Раньше мой код был другим, но я неуклонно менял все больше и больше, чтобы увидеть, не является ли что-то в моем коде проблемой, поэтому на данный момент это практически то же самое.

Любая помощь в том, что является причиной проблемы, где еще я должен искать информацию о DirectDraw через CE5.0 или указатели на все остальное, что я делаю ужасно неправильно, будет принята с благодарностью.

Дополнительная информация: Устройство, над которым я работаю, представляет собой пользовательскую среду, в которой D3D не подходит, хотя у меня есть информация от производителя платы о том, что DirectDraw поддерживается и доступно 2d аппаратное ускорение, так что это не должно быть проблемой.

1 Ответ

0 голосов
/ 07 декабря 2010

Поместите это здесь для других, у которых есть подобные проблемы. Посмотрев некоторое время на код C ++, кажется, что в CE5.0 используются переменные и функции, отличные от 6.0+, поэтому вы должны использовать такие вещи, как IDirectDraw4, а не IDirectDraw и IDirectDrawSurface5, которые необходимо преобразовать из IDirectDrawSurface4.

Надеюсь, это полезная информация для всех, у кого похожая проблема. Я не исправил все свои проблемы с этим кодом, но это хорошее место для начала.

...