2012-02-29 6 views
3

J'utilise le wrapper wkHTMLtoXSharp pour appeler la bibliothèque wkHTMLtoPDF sur Windows 2008 R2. Tout fonctionne très bien avec une exception. J'appelle le wrapper à partir d'un service Windows C#. Lors de la première exécution, la conversion fonctionne parfaitement. Lors des exécutions suivantes, je reçois une corruption de mémoire ou AccessViolationException. La seule façon de le réparer est de tuer le processus dans lequel la DLL s'exécute. Cela semble réinitialiser le problème sous-jacent. Toute idée de comment résoudre ce problème?wkHTMLtoPDF corruption de mémoire et AccessViolationException

+0

Débogage corruption du tas dans le code que vous n'avez pas écrit, écrit dans une langue que vous ne connaissez pas est très unjoyful . Surtout compte tenu de la taille de la base de code. Si vous ne pouvez pas obtenir l'aide des auteurs de la bibliothèque, jetez-la et essayez quelque chose d'autre. –

+0

Merci pour votre aide. Je reçois de l'aide des auteurs de la bibliothèque. – rghazarian

+0

Je suis confronté au même problème. Pouvez-vous aider? –

Répondre

0

Sure Zubrowka. J'ai essayé tous les trucs que je connais pour surmonter la corruption de la mémoire sans trop de chance. Etant donné que la première exécution fonctionnait parfaitement, j'ai décidé d'encapsuler l'appel PDF dans un exécutable et j'ai appelé l'exécutable CommandLine via ProcessStartInfo. Cela fonctionne très bien pour moi. J'ai préféré ne pas provoquer autant de changement de contexte, cependant, c'est le moindre des deux maux.

1

J'ai eu les mêmes problèmes. Je me suis retrouvé avec une solution similaire à celle rggazarian en utilisant le package de wkhtmltopdf de here Et puis ce code

public static void GenerateNewStylePDF(string domain, string url, string applicationPath) 
    { 
     var p = new Process(); 
     var startInfo = new ProcessStartInfo 
          { 
           FileName = applicationPath + "\\bin\\wkhtmltopdf\\wkhtmltopdf.exe", 
           Arguments = domain + url + " \"" + applicationPath + "export.pdf\"", 
           UseShellExecute = false, 
           RedirectStandardOutput = true, 
           RedirectStandardError = true 
          }; 
     p.StartInfo = startInfo; 
     p.Start(); 
     var s = p.StandardOutput.ReadToEnd(); 
     var e = p.StandardError.ReadToEnd(); 
     p.WaitForExit(); 
    } 
Questions connexes