Ghostscript.net多线程问题

本文关键字:问题 多线程 net Ghostscript | 更新日期: 2023-09-27 17:53:47

我有一个Sharepoint应用程序,它使用Ghostscript.net包装器将pdf文档光栅化为png。现在我正在使用他们网站上的例子。但问题是,当我试图转换为pdf在同一时间。使用此代码一次只能工作一个。但是我得到错误"调用'gsapi_new_instance'时发生错误:-100"当我试图同时转换2个pdf文件时。

               using (MemoryStream pdfStream = new MemoryStream(pdfbyte))
            using (GhostscriptRasterizer rasterizer = new GhostscriptRasterizer())
            {
                rasterizer.Open(pdfStream, version, false);
                for (int i = 1; i <= rasterizer.PageCount; i++)
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        DrawImage img = rasterizer.GetPage(dpi, dpi, i);
                        img.Save(ms, ImageFormat.Png);
                        ms.Close();
                        output = "data:image/png;base64," + Convert.ToBase64String((byte[])ms.ToArray());
                    }
                }
                rasterizer.Close();

否则,如果我使用rasterizer.Open(pdfStream, version, true); I,错误的"算术操作导致溢出"

我应该使用GhostscriptProcessor或Viewer实例代替吗?谁有这段代码的好例子?

Ghostscript.net多线程问题

所以我知道问题是什么了。我必须为3.5编译Ghostscript.net,因为我在Sharepoint 2010网站上使用它。当我这样做的时候,我搞砸了dynamicnativellibrary .cs文件中的这行代码。

string procName = Marshal.PtrToStringAnsi((IntPtr)(byte*)(thunkData) + 2);

当我将其更改为以下内容时,现在似乎没有问题了。

IntPtr a = (IntPtr)(byte*)(thunkData);
string procName = Marshal.PtrToStringAnsi(new IntPtr(a.ToInt64() + 2));