C# 和 Ghostscript 64 位

标签 c# c++ api pinvoke ghostscript

我正在编写开源 C# Ghostscript 包装器。你可以试试看看( http://ghostscriptnet.codeplex.com )。大多数功能已实现,并且适用于两个版本 (x86/x64)。我遇到的问题是当我初始化显示设备以将 pdf 直接呈现到屏幕时(我成功实现了 gsapi_set_display_callback 回调)。

我使用的参数如下:

string[] args = new string[] {
    "",
    "-sDEVICE=display",
    "-dTextAlphaBits=4",
    "-dGraphicAlphaBits=4",
    "-dDisplayHandle=1234",
    "-dDisplayResolution=72",
    "-dDisplayFormat=" + ((int)DISPLAY_FORMAT_COLOR.DISPLAY_COLORS_RGB | 
                            (int)DISPLAY_FORMAT_ALPHA.DISPLAY_ALPHA_NONE | 
                            (int)DISPLAY_FORMAT_DEPTH.DISPLAY_DEPTH_8 | 
                            (int)DISPLAY_FORMAT_ENDIAN.DISPLAY_LITTLEENDIAN | 
                            (int)DISPLAY_FORMAT_FIRSTROW.DISPLAY_BOTTOMFIRST).ToString() };

这个论点在 32 位版本上运行良好 并且我能够将 pdf 页面呈现到屏幕上。初始化工作正常。

当我切换到 64 位版本 时,出现类型检查 (e_typecheck = -20) 错误。

我知道 64 位版本使用 -sDisplayFormat 我也尝试过但没有成功。

有人知道如何在 64 位版本的 Ghostscript 库上将设备初始化为显示器吗?我不认为我遗漏了什么。这是 64 位版本的 ghostscript 库中的错误吗?

我尝试了早期版本的 Ghostscript 库,但在 64 位版本上遇到了同样的错误。

我使用的当前版本是 9.09。您可以在其中查看代码的类:Ghostscript.NET.Viewer.GhostscriptViewer.cs

最佳答案

已解决。第一个问题是对于 64 位版本,需要使用 -sDisplayHandle,因为传入的值应该是字符串。 32 位版本使用 -dDisplayHandle(数字值)。第二个问题是我的 StructureLayout Pack = 1。64 位版本应该是 0。

关于C# 和 Ghostscript 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18498443/

相关文章:

c# - 命名参数的规则是什么?为什么?

c# - 在 Startup.cs 中生成角色在 .NET Core 2.0 中不再起作用

c++ - 在 C++ 中使用 Arduino 上的数组

c++ - 如何优化共享库的大小?

css - Facebook 点赞框 API : Unable to alter height

c# - 如何生成退回电子邮件通知,其中包含一些额外信息

c# - C#面试题

c# - MonoGame 与 SDL

c# - Instagram 授权范围不起作用

android - 如何获取gmail用户的联系人?