为什么 Graphviz 在 gvLayout 上失败?

2023-12-12

再一次,我在这里编写 C,但并不真正知道我在做什么......

我已经拼凑了一个简单的函数,我可以从 C# 程序调用该函数,该程序接受点字符串、输出格式和文件名,并使用 Graphviz 呈现图形。

#include "types.h"
#include "graph.h"
#include "gvc.h"

#define FUNC_EXPORT __declspec(dllexport)

// Return codes
#define GVUTIL_SUCCESS          0
#define GVUTIL_ERROR_GVC        1
#define GVUTIL_ERROR_DOT        2
#define GVUTIL_ERROR_LAYOUT     3
#define GVUTIL_ERROR_RENDER     4

FUNC_EXPORT int RenderDot(char * dotData, const char * format,
        const char * fileName) {
    Agraph_t * g;    // The graph
    GVC_t * gvc;     // The Graphviz context
    int result;      // Result of layout and render operations

    // Create a new graphviz context
    gvc = gvContext();
    if (!gvc) return GVUTIL_ERROR_GVC;

    // Read the DOT data into the graph
    g = agmemread(dotData);
    if (!g) return GVUTIL_ERROR_DOT;

    // Layout the graph
    result = gvLayout(gvc, g, "dot");
    if (result) return GVUTIL_ERROR_LAYOUT;

    // Render the graph
    result = gvRenderFilename(gvc, g, format, fileName);
    if (result) return GVUTIL_ERROR_RENDER;

    // Free the layout
    gvFreeLayout(gvc, g);

    // Close the graph
    agclose(g);

    // Free the graphviz context
    gvFreeContext(gvc);

    return GVUTIL_SUCCESS;
}

它编译得很好,但是当我调用它时,我得到了GVUTIL_ERROR_LAYOUT。起初,我认为这可能是我声明 P/Invoke 签名的方式,所以我从 C 程序中测试它,但它仍然以同样的方式失败。

RenderDot("digraph graphname { a -> b -> c; }", "png", "C:\testgraph.png");

我错过了什么?

EDIT

如果有可能与我编译代码的方式有关,那么这是我正在使用的命令:

cl gvutil.c /I "C:\Program Files (x86)\Graphviz2.26\include\graphviz"
    /LD /link /LIBPATH:"C:\Program Files (x86)\Graphviz2.26\lib\release"
    gvc.lib graph.lib cdt.lib pathplan.lib

我一直在关注本教程这解释了如何使用 Graphviz 作为库,因此我链接到它列出的 .lib 文件。


Graphviz 根据配置文件中的信息动态加载布局和渲染插件,我没有将其复制到应用程序的目录中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Graphviz 在 gvLayout 上失败? 的相关文章

随机推荐

  • WCF 服务返回 400 错误请求

    我有这个应用程序可以在本地运行 并且在部署时使用 mdf SQL Express 数据库文件 我通常将其用于测试目的 但是 当我将其更改为与 SQL Server 2008 一起使用时 应用程序可以工作 但服务却不能 例如 如果在页面后面的
  • 警告:imagejpeg() [function:imagejpeg]: gd-jpeg: JPEG 库报告不可恢复的错误

    我的根文件夹中安装了 WordPress 直到昨天它工作正常 但今天它给出了以下错误 我猜生成缩略图图像 Warning imagejpeg function imagejpeg gd jpeg JPEG library reports u
  • 使用 xlsxwriter 将表格从 Word (.docx) 写入 Excel (.xlsx)

    我正在尝试解析表格的单词 docx 然后使用 xlsxwriter 将这些表格复制到 Excel 这是我的代码 from docx api import Document import xlsxwriter document Documen
  • 将大文本插入 blob

    很长一段时间以来 我一直在尝试寻找这个问题的解决方案 但在互联网上却找不到答案 我遇到这种情况 我需要使用 php 从 firebird 数据库插入或更新 blob 字段 子类型 1 问题是 当文本变得非常大 gt 36k 时 它不会执行查
  • Spring 状态机 - 将静态数据附加到状态

    使用 Spring 状态机 我们有状态和事件 我找不到任何关于是否可以在配置期间将静态数据附加到状态的文档 例如 如果有状态 S1 和 S2 public void configure StateMachineStateConfigurer
  • 在 Java 中打印原语数组

    我有两个数组 char chars 1 2 3 int numbers 1 2 3 为什么打电话后System out print chars 我越来越123之后System out print numbers 我有类似的东西 C 9304
  • Heroku 工具带在上次更新后无法运行

    我使用的是 Ubuntu 10 10 Heroku 在上次更新 上次运行 heroku update 后完全停止工作 现在每个命令都会产生 usr local heroku lib heroku updater rb 54 ininject
  • Python 错误“ImportError:没有命名的模块”

    Python 安装在本地目录中 我的目录树如下所示 local directory site packages toolkit interface py 我的代码在这里 local directory site packages toolk
  • C++中的隐藏规则是什么?

    我对名称隐藏和信息隐藏一词感到非常困惑 最重要的是 c 中的隐藏规则是什么 有人可以给我一个定义吗 姓名隐藏当你覆盖一个类时会发生 struct A int x int y void foo void bar struct B A int
  • 如何在 .gitconfig 中使用 ANSI 256 色

    我正在尝试为 git status 设置自定义颜色 如上所述here 虽然使用预定义的颜色名称有效 color status changed yellow normal 使用 ANSI 256 颜色代码不起作用 color status c
  • JPA 中的每个表是否应该有一个存储库?

    JPA 中的每个表是否应该有一个存储库 如果没有 如何解析存储库数据库中的泛型 例如 下面是一个StoreRepository 它处理CRUD上的操作Store目的 如果我想让存储库保存一个StoreEvent对象也是如此 我将如何更改下面
  • Python 中多元正态分布的集成

    我正在尝试在 python 中集成多元分布 为了测试它 我使用二元正态分布构建了这个玩具示例 我用nquad 以便稍后将其扩展到两个以上的变量 这是代码 import numpy as np from scipy import integr
  • 是否可以从 find 命令输出中删除根目录?

    我想移动一些文件 并认为 find 是选择正确文件的好选择 所以我寻找这些文件 find somedir iname somefile somedir subdir1 subdir2 somefile somedir subdir2 som
  • 如何通过API检查用户是否登录了他的google帐户?

    我正在开发一个页面来显示用户可以访问的文档的预览 为了预览 我使用带有 src 的 Iframe 文档 ID 这里的问题是 当用户未登录时 它会显示一个空白的 iframe 如果当前用户未登录 我想将用户重定向到谷歌登录页面 然后显示预览文
  • 不属于同一组的点到该点的最近邻距离

    在我的数据集中 我有点 其位置由下式给出X and Y 按以下方式分组ID 我想计算每个点到其他组中的点的最近邻 NN 距离 换句话说 如果ID一个点是1 代码应该从满足的点搜索 NNDID 1 伪 R 代码可能如下所示 DT DT c n
  • Web Api .net框架4.6.1和identityServer4

    Web Api net 框架 我有一个使用 IdentityServer4 net core 1 1 完成的身份验证服务 客户端设置如下 new Client ClientId client AllowedGrantTypes GrantT
  • mod_rewrite 不适用于 Windows 7 上的 Apache 2.2

    我已在 Windows 7 计算机上启动并运行 WampServer 它安装在 C wamp 中 我已经在 C wamp bin apache Apache2 2 1 7 conf extras httpd vhosts 中使用以下 Vir
  • PHP、正则表达式和多级破折号并根据字符串出现进行分组

    我有一个看起来像这样的字符串 15 02 01 0000 15 02 02 0000 15 02 03 0000 15 02 04 0000 15 02 05 0000 15 02 10 0000 15 02 10 9100 15 02 1
  • setRotationY(180) on recyclerview 或 viewpager 在 Android 9(API 28) 中创建滚动问题

    我通过为 recyclerview 和 viewpagers 实现 setRotationY 来管理 RTL 内容 但似乎它仅在具有 API 28 的设备中产生滚动 滑动问题 否则它工作得很好 如果我删除 setRotationY 它工作得
  • 为什么 Graphviz 在 gvLayout 上失败?

    再一次 我在这里编写 C 但并不真正知道我在做什么 我已经拼凑了一个简单的函数 我可以从 C 程序调用该函数 该程序接受点字符串 输出格式和文件名 并使用 Graphviz 呈现图形 include types h include grap