У меня некоторое время была проблема с тем, чтобы заставить 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 аппаратное ускорение, так что это не должно быть проблемой.