Un appel à la fonction PInvoke a déséquilibré la stack. Ceci est probablement dû au fait que le PInvoke géré .. (.NET 4)

Mon projet a réussi sans erreur dans .NET Frame work 3.5. Mais, quand je le cible pour .NET Frame work 4. J’ai eu l’erreur:

Un appel à la fonction PInvoke a déséquilibré la stack. Cela est probablement dû au fait que la signature PInvoke gérée ne correspond pas à la signature cible non gérée.

J’ai utilisé une bibliothèque non gérée comme ci-dessous:

[StructLayout(LayoutKind.Sequential )] public class DGNElemCore { public int offset; public int size; public int element_id; public int stype; public int level; public int type; public int complex; public int deleted; public int graphic_group; public int properties; public int color; public int weight; public int style; public int attr_bytes; public IntPtr attr_data; public int raw_bytes; public IntPtr raw_data; } [DllImport("DgnLib.dll", EntryPoint = "DGNOpen")] public static extern IntPtr DGNOpen(ssortingng fileName, int bUpdate) 

Savez-vous comment résoudre cette erreur?

Ajoutez ceci avec l’importation de dll.

 , CallingConvention = CallingConvention.Cdecl)] 

Comme pris d’ ici .

Invocation de la plate-forme

Pour améliorer les performances d’interopérabilité avec du code non managé, des conventions d’appel incorrectes dans un appel de plateforme entraînent maintenant l’échec de l’application. Dans les versions précédentes, la couche de marshaling résolvait ces erreurs dans la stack.

Le débogage de vos applications dans Microsoft Visual Studio 2010 vous alertera de ces erreurs afin que vous puissiez les corriger. Si vous avez des fichiers binarys qui ne peuvent pas être mis à jour, vous pouvez inclure l’élément dans le fichier de configuration de votre application pour permettre la résolution des erreurs d’appel jusqu’à la stack, comme dans les versions antérieures. Toutefois, cela peut affecter les performances de votre application.