2010-12-01 43 views
0

J'ai eu un problème avec le fait que DirectDraw fonctionne sur un système CE5.0. J'ai finalement trouvé du code pour le faire fonctionner sur Windows Moblie, et à cause de quelques problèmes, j'ai compilé correctement le code.'Le paramètre est incorrect' lors de la tentative d'utilisation de PInvoke DirectDraw dans WinCE5.0

Il fonctionne avec succès grâce à la création de l'instance avec la poignée à la forme de fenêtres, mais quand il est de vérifier les capacités du système via:

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); 

Je reçois une exception « Le paramètre est incorrect » . Je reçois également cette exception sur les fonctions ultérieures si je commente celle-ci, ce qui me porte à croire qu'il y a un problème avec mon PInvoke quelque part, mais je ne sais pas où chercher comme information sur CE5.0 DirectDraw semble être très limité. Je suis actuellement mes fonctions importais avec

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

mais l'erreur semble provenir que des interfaces qui sont mènent avec quelque chose comme

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

L'article que j'ai suivi les meilleurs résultats à ce jour (et celui que j'ai utilisé comme code de base de tentative) est here. Mon code était différent, mais je changeais régulièrement de plus en plus pour voir si quelque chose dans mon code était le problème, donc à ce stade, c'est pratiquement la même chose.

Toute aide sur ce qui cause le problème, où je devrais chercher des informations sur DirectDraw via CE5.0, ou des pointeurs sur tout ce que je fais horriblement mal serait grandement appréciée.

Informations supplémentaires: L'appareil sur lequel je travaille est un environnement personnalisé dans lequel D3D n'est pas une option, bien que le fabricant de cartes me fournisse des informations indiquant que DirectDraw est supporté et que l'accélération matérielle 2d est disponible. un problème.

Répondre

0

En mettant ceci ici pour d'autres qui ont des problèmes semblables. Après avoir regardé dans le code C++ pendant un moment, il semble que CE5.0 utilise différentes variables et fonctions que 6.0+, par conséquent vous devez utiliser des choses comme IDirectDraw4 plutôt que IDirectDraw et IDirectDrawSurface5 qui doit être converti à partir d'un IDirectDrawSurface4. J'espère que c'est une information utile pour quelqu'un d'autre qui a un problème similaire. Je n'ai pas résolu tous mes problèmes avec ce code, mais c'est un bon point de départ.