madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 2012
-
2 mai 2011 à 11:08
LUDINSKI
Messages postés441Date d'inscriptionmardi 2 décembre 2003StatutMembreDernière intervention22 mai 2012
-
3 mai 2011 à 09:17
Je travail donc en c#, j'ai donc fait l'import de la dll contenant cette méthode, en utilisant bien une 20aine de déclaration différentes (parce que j'ai toujours un bug), en suivant les tutos et les topics de forum sur la question :
Je ne vous met pas l'appel de la fonction, je déclare bêtement 2 variables pour les 2 paramètres (entrée et retour). J'ai aussi fait une infinité de test avec des Marshal.StringToHGlobalAnsi et autres...
Dans tous les cas, lors de l'appel de la fonction (pendant l'excecution), j'obtient systématiquement une exception. Elle varie un peu selon les cas :
J'ai déja eu des exceptions qui m'expliquait qu'une conversion managé/non managé était non valide (j'ai plus la formulation exacte)...
Mais la plus récurrente est :
"Un appel à la fonction PInvoke 'WindowsFormsTestComNUM1060!WindowsFormsTestComNUM1060.ComNum::Execute' 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."
madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 20121 2 mai 2011 à 14:23
Merci, mais comme tu dit, y'a pas la solution à mon problème !
Dans ton lien, c'est codé en basic, et non en C# !
Et comme moi, il avait un problème avec les types de variable, mais cela concernait les entiers, moi cela concerne les char* :s
dodo7263
Messages postés614Date d'inscriptionmercredi 10 septembre 2008StatutMembreDernière intervention 9 février 20176 2 mai 2011 à 14:50
Oui je sais mais ça peut être le fond de ton problème.
Ne serait ce pas un problème de type en le char* de ta dll et les types que tu utilises pour déclarer ta fonction en c# ?
Après faut adapter pour ton problème spécifique.
@pluche
[b]"Chez ceux qui semblent très vertueux se cachent en général la vanité, l'orgueil, l'intolérance".
madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 20121 2 mai 2011 à 16:15
Bien que c'est ça mon problème !
Je ne sais pas comment adapter les variables char* de la dll native dans mon code c# = "marshaling" ! C'est le titre même de mon topic...
Donc dans ce cas, je repose ma question plus simplement : je fait quoi comme prototype de la méthode que je veux utiliser lors de mon import dans le c# ? ou plus concrètement, j'utilise quels types de variable en entrée et en retour ? (cf mon premier msg : j'ai déja fait 10000 tests)
madkeyboard
Messages postés100Date d'inscriptionmercredi 27 avril 2011StatutMembreDernière intervention21 décembre 20121 3 mai 2011 à 09:13
Fabuleux !
ça marche nickel ^^
Je te remercie pour ton aide précieuse Ludinski ! J'avais pas vu ton exemple de code, mais je vais l'étudier en détail, pour éviter de revenir avec des problèmes déja résolus