dll non libérée (Attempted to read or write protected memory.)
Bonjour,
J'ai une page qui utilise une classe C# implémentant une .dll écrite en C de la manière suivante :
Code:
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");
} |
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) :
Citation:
"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.