Bonjour,
J'ai une page qui utilise une classe C# implémentant une .dll écrite en C de la manière suivante :
Tout fonctionne très bien sauf dans le cas où ma page est appelée plusieurs fois de suite. Dans ce cas j'ai une erreur (cf ci-dessous) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 //Chargement de la DLL kernel 32 afin de charger la fonction loadLibrairy [DllImport("Kernel32.dll", EntryPoint = "LoadLibrary")] private static extern IntPtr LoadLibrary( [In] string lpFileName ); //déclaration de la fonction dans la DLL pour la décompression [DllImport("CompressionTrame.dll", EntryPoint = "DecompressionLZW", ExactSpelling = false, CallingConvention = CallingConvention.StdCall)] public static extern int DecompressionLZW(ref COMPRESSION_TRAME trame); //déclaration de la fonction dans la DLL pour la compression [DllImport("CompressionTrame.dll", EntryPoint = "CompressionLZW", ExactSpelling = false, CallingConvention = CallingConvention.StdCall)] public static extern int CompressionLZW(ref COMPRESSION_TRAME trame); // ############################################### // CONSTRUCTEUR // ############################################### /// <summary> /// Le constructeur de la classe. /// </summary> /// <param name="chemin">Chemin permettant d'accéder aux .dll</param> public compressionCriptage(String chemin) { //chargement de CompressionTrame.dll LoadLibrary(chemin + "\\CompressionTrame.dll"); }
"Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
Exception Details: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is
corrupt.
Stack Trace:
[AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.]
compressionCriptage.CompressionLZW(COMPRESSION_TRAME& trame) +0
compressionCriptage.Compression(String chaine) in c:\Inetpub\...\compressionCriptage.cs:125
communication_XXX.Page_Load(Object sender, EventArgs e) in c:\Inetpub\....communication_XXX.aspx.cs:303
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061
Je pense qu'il s'agit d'un problème de libération des ressources (la .dll n'est pas encore dispo quand on a re-besoin d'elle).
Le problème est que je ne sais pas comment "libérer" ma .dll
Pour info, j'ai déjà regardé un peu sur Google et aussi du côté de
- http://nico-pyright.developpez.com/t...vokeWithCSharp,
- http://morpheus.developpez.com/dlldotnet/,
- http://laurent-dardenne.developpez.c...seurs/#L2-10-2 etc...
et les choses ne me semblent pas beaucoup plus clair (faut il une méthode close dans la .dll?, utiliser IDisposable?..)
Merci d'avance pour votre aide.
Partager