2011-09-08 6 views
3

J'essaie d'utiliser pInvoke, mais à la fois sur l'émulateur et sur le périphérique, invoke Je suis nouveau à .NET (suis un développeur C++) et je ne comprends pas comment le JIT/framework ne peut pas trouver cette DLL/méthode/etcComment réparer "System.MissingMethodException = {" Impossible de trouver PInvoke DLL 'user32.dll'. "} Sur Windows 6.5?

Y at-il quelque chose d'autre que je dois faire pour obtenir à travailler

En regardant des questions similaires, il semble que je ou non avoir à ajouter la DLL soit la solution ou l'ACR - mais où dois-je obtenir ce fichier

Sûrement le système d'exploitation sur. l'appareil a l'utilisateur3 2.dll? Et la version de Windows 7 ne peut pas être la bonne à installer sur l'appareil, n'est-ce pas?

EDIT

Chacun de ces facteurs échoue:

[DllImport("coredll.dll", EntryPoint = "FindWindowW", SetLastError = true)] 
     private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

     [DllImport("user32.dll", SetLastError=true)] 
     [return: MarshalAs(UnmanagedType.Bool)] 
     private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags); 

     [DllImport("user32.dll", SetLastError = true)] 
     internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); 

     [DllImport("coredll.dll", EntryPoint = "SipShowIM")] 
     public static extern bool SipShowIMP(int code); 

     [DllImport("user32.dll")] 
     public static extern IntPtr GetForegroundWindow(); 
+0

Pouvez-vous fournir la signature PInovke? – JaredPar

Répondre

4

Certes, le système d'exploitation sur l'appareil a user32.dll?

Non, malheureusement, ce n'est pas le cas. Windows Mobile n'inclut pas user32.dll, ainsi que de nombreuses autres DLL Windows normales d'API. Au lieu de cela, vous avez généralement besoin de P/Invoke dans coredll.dll à la place. Pour les signatures, voir la section PInvoke.net (en bas à gauche) pour "Smart Device Functions".


Edit:

Certaines des signatures il y a de toute évidence erronée, comme vous le mentionnez dans les commentaires. Vous pouvez regarder l'API Windows Mobile pour les fonctions (telles que SetWindowPos) pour obtenir la bonne signature.

Je crois, pour vous, la plupart devraient être coredll.dll:

[DllImport("coredll.dll", SetLastError = true)] 
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

[DllImport("coredll.dll", SetLastError=true)] 
[return: MarshalAs(UnmanagedType.Bool)] 
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags); 

[DllImport("coredll.dll", SetLastError = true)] 
internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); 

[DllImport("coredll.dll", EntryPoint = "SipShowIM")] 
public static extern bool SipShowIMP(int code); 

[DllImport("coredll.dll")] 
public static extern IntPtr GetForegroundWindow(); 
+0

Alors, d'où puis-je les obtenir? – Tim

+0

J'ai regardé ce lien que vous avez fourni - mais les signatures montrent toujours user32.dll. Je suis confus. - http://pinvoke.net/default.aspx/coredll.SetWindowPos# – Tim

+0

Je viens de changer le nom de user32 en coredll et cela semble fonctionner. Merci – Tim

Questions connexes