Pb avec la fonction shellexecute

oufmalade Messages postés 2 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 12 juin 2011 - 9 juin 2011 à 17:54
oufmalade Messages postés 2 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 12 juin 2011 - 12 juin 2011 à 20:13
bonjour a tous,
voici un bout de mon code:
  
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                   (ByVal hwnd As Long, ByVal lpszOp As String, _
                    ByVal lpszFile As String, ByVal lpszParams As String, _
                    ByVal LpszDir As String, ByVal FsShowCmd As Long) _
                    As Long
...
...

StartDoc = ShellExecute("", "Open", DocName,"", Path, SW_SHOWNORMAL)


lorsque je compile je n'ai pas de soucis, mais si je teste ça ne fonctionne pas et j'ai un msg d'erreur :
PInvokeStackImbalance a été détecté
Message: Un appel à la fonction PInvoke 'PROGTEST!PROGTEST.ApiModule::ShellExecute' a déséquilibré la pile. Cela peut se produire, car la signature PInvoke managée ne correspond pas à la signature cible non managée. Vérifiez que la convention d'appel et les paramètres de la signature PInvoke correspondent à la signature non managée cible.

Je ne comprend pas ce qui ne va pas, je me casse la tête sur ce pb depuis 3 semaines et je bloque complet. merci de votre aide
pour info j'utilise VB 2010

4 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
9 juin 2011 à 19:07
Bonjour,

Pour lancer un processus en .NET, préfères System.Diagnostics.Process.*

Sinon, actives Option Strict et Option Explicit (propriétés du projet)
Je pense que tu trouveras la réponse.

Mon site
0
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
9 juin 2011 à 19:51
Bonjour,

Effectivement il vaut mieux utiliser Process.start sinon la déclaration de l'API shellexecute en vb.Net diffère légèrement de celle en vb6 au niveau des types des paramètres


L'expérience, c'est une connerie par jour, mais jamais la même..
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 juin 2011 à 19:56
Long VB6 devient Integer en .Net
0
oufmalade Messages postés 2 Date d'inscription samedi 27 octobre 2007 Statut Membre Dernière intervention 12 juin 2011
12 juin 2011 à 20:13
Je vous remercie pour vos réponses, elles m'ont bien aidé

J'ai testé ça mais j'ai pas trouvé la solution
Sinon, actives Option Strict et Option Explicit (propriétés du projet)
Je pense que tu trouveras la réponse.


Finalement j'ai modifié mon code au profit de la fonction System.Diagnostics.Process.start a la place de shellexecute.

pour le moment ça a l'air de bien fonctionner.

Merci encore !
0
Rejoignez-nous