Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Ghostscript在x64模式下锁定分离_C#_Ghostscript_Adobe Illustrator - Fatal编程技术网

C# Ghostscript在x64模式下锁定分离

C# Ghostscript在x64模式下锁定分离,c#,ghostscript,adobe-illustrator,C#,Ghostscript,Adobe Illustrator,我正在使用Ghostscript的DLL(gsdll[32 | 64].DLL)来处理Adobe Illustrator文件的TIFF分离。我的代码在C#NET中,并在Windows中运行 关于背景信息,我正在使用“tiffsep”设备创建每个板的TIFF,然后通过GDI将其转换为JPG,以便在UI中显示 问题是,在使用64位DLL时,Ghostscript会在某些分隔上保留锁。这是我正在使用的调用DLL的代码: private static void ExecuteGs64(字符串[]args

我正在使用Ghostscript的DLL(gsdll[32 | 64].DLL)来处理Adobe Illustrator文件的TIFF分离。我的代码在C#NET中,并在Windows中运行

关于背景信息,我正在使用“tiffsep”设备创建每个板的TIFF,然后通过GDI将其转换为JPG,以便在UI中显示

问题是,在使用64位DLL时,Ghostscript会在某些分隔上保留锁。这是我正在使用的调用DLL的代码:

private static void ExecuteGs64(字符串[]args)
{
IntPtr instancePtr;
锁(instanceLock)
{
CreateAPIInstance64(out instancePtr,IntPtr.Zero);
尝试
{
int result=NativeMethods.InitAPI64(instancePtr,args.Length,args);
如果(结果<0)
{
抛出新的ExternalException(“Ghostscript转换错误”+结果,结果);
}
}
最后
{
//根据GS文档,这应该会清理所有使用的内存
NativeMethods.ExitAPI64(instancePtr);
NativeMethods.DeleteAPIInstance64(instancePtr);
}
}
}
内部静态类NativeMethods
{
[DllImport(“gsdll64.dll”,EntryPoint=“gsapi\u新实例”)]
内部静态外部int CREATEAPINSTANCE64(输出IntPtr pinstance、IntPtr调用者\ U句柄);
[DllImport(“gsdll64.dll”,EntryPoint=“gsapi_init_with_args”)]
内部静态外部intinitapi64(IntPtr实例,intargc,字符串[]argv);
[DllImport(“gsdll64.dll”,EntryPoint=“gsapi_exit”)]
内部静态外部int ExitAPI64(IntPtr实例);
[DllImport(“gsdll64.dll”,EntryPoint=“gsapi\u delete\u实例”)]
内部静态外部void DeleteAPIInstance64(IntPtr实例);
}
我使用以下参数运行此操作:

-q -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dEPSCrop -dMaxBitmap=500000000 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dAutoRotatePages=/None -dAlignToPixels=0 -dGridFitTT=0 -dFirstPage=1 -dLastPage=1 -sDEVICE=tiffsep -r150x150 -sOutputFile=[OutPath] [InPath]
代码运行,GS生成分离。然而,一些分离仍然被应用程序锁定(我已经尝试将GS代码从主应用程序中取出,并在测试控制台应用程序中运行它,但没有其他操作,结果相同)。这些锁一直保持到应用程序停止

对我来说,这是一个问题,因为GS调用需要作为更大工作流的一部分进行,并且它生成的文件需要进一步处理和最终清理,直到释放锁才能进行清理

举个例子:

Original file: BGL1100001A01.ai

Outputs (L denotes which files are locked):

[ ] BGL1100001A01(Black).tif
[L] BGL1100001A01(Cutter Guide).tif
[ ] BGL1100001A01(Cyan).tif
[ ] BGL1100001A01(Magenta).tif
[L] BGL1100001A01(PANTONE 143 C).tif
[L] BGL1100001A01(PANTONE 201 C).tif
[L] BGL1100001A01(PANTONE 360 C).tif
[L] BGL1100001A01(PANTONE 485 C).tif
[L] BGL1100001A01(PANTONE 488 C).tif
[L] BGL1100001A01(Spot White).tif
[ ] BGL1100001A01(Yellow).tif
[L] BGL1100001A01.tif
这由procexp.exe确认:

出于某种原因,它不会锁定CMYK板,但它会锁定其他所有板

奇怪的是:它在32位模式下不这样做

如果我使用gsdll32.dll,一切正常,没有锁。不幸的是,我需要在64位模式下运行它

我开始使用GS 9.07中的DLL(最新版本来自他们的网站);在绝望中,我从源代码下载并重新编译了它们,但同样的事情正在发生


如果你有任何帮助,我会永远爱你 > /p>为什么这个问题被标记为“C++”?GHESTScript是用C++编写的,可能是我必须重新编译它来改变它的行为。Ghostscript实际上是用C编写的。我建议你为此打开一个bug报告。Doh!是的,我的坏孩子,没有标签。我已经提交了一份关于他们bug追踪器的报告,但我有一点希望,那就是我遗漏了什么。。。我在Win7上使用Gs9.18,使用的是C#x64版本,遇到了类似的“输出文件被锁定的时间比应该的时间长”问题,尽管我使用的是“pnggray”设备。我检查了追踪器,发现它看起来很匹配,但自2014年初以来似乎没有任何活动。我现在不太担心,因为我使用临时文件进行转换,临时文件有时也会被清理*耸耸肩*