为什么 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 上失败? 的相关文章

  • C# - 带 GUI 的后台应用程序

    我的问题是我想创建一个后台应用程序 但具有可以恢复并最小化到系统托盘的用户界面 并且它从窗口启动 我尝试搜索如何启动 但只找到有关 Windows 服务的线程 没有 UI 或创建表单并隐藏它 所以我的问题是我应该如何开始 Windows 窗
  • 如何使 Window.Current 关闭后可见?

    我有一个可以打开新窗口的应用程序 如果原始窗口关闭 然后用户启动应用程序 例如从开始菜单 TryShowAsStandaloneAsync无法打开新窗口 为什么 所以我想 复活 原来的那个 但虽然我用Window Current Activ
  • 简单、高效的弱指针,当目标内存被释放时设置为 NULL

    有没有简单 高效的弱 保护指针 我需要多个指向同一对象的指针 当删除该对象时 这些指针都会自动设置为 NULL 有一个 主 指针始终用于删除对象 但可以有多个其他指针引用同一对象 以下是一些不太符合我的需求的解决方案 QPointer ht
  • 从列表中获取数组而不进行堆分配

    我有一个列表 我想将其数组分配给一个属性 public void BuildMesh List
  • 剃刀 2 到剃刀 3 MVC 5

    我一直在开发 MVC 4 解决方案 并且一直在尝试将其升级到 MVC 5 我已按照概述的步骤操作here http www asp net mvc tutorials mvc 5 how to upgrade an aspnet mvc 4
  • 通过 Microsoft Graph 从 Azure AD 获取组中的用户

    我正在通过 Microsoft Graph 从 AzureAD 请求用户列表 我取回了 User 对象 但它们的 MemberOf 属性始终为 null 我认为我可以使用 Expand 来专门请求该属性 虽然它不会导致错误 但它也不会填充该
  • 为什么表达式树不能包含命名参数规范?

    使用 AutoMapper 我找到了一个非常适合命名参数的地方 ForMember s gt s MyProperty opt gt opt MapFrom s gt BuildMyProperty s isAdvanced false 但
  • 为什么Java不支持C中的clrscr这样的函数?

    我有一个问题 对很多人来说可能听起来很愚蠢 但我不能停下来把它发布在这里 因为在互联网上找不到任何东西 为什么java没有我们在C中使用的clrscr之类的函数 如果我创建了一个基于用户输入反复迭代的 java 控制台应用程序 然后如果我想
  • 调试器 StepInto 自动生成的代码和 JMC 问题

    我正在使用 MDBG 示例制作托管 NET 调试器 目前 我正在努力解决 StepInto 行为 而 StepOut 和 StepOver 似乎有效 实现Just My Code迈步我在呼唤SetJMCStatus在模块加载时 这工作得很好
  • 如何在 Mac OS X 中获取 aio 信号处理程序的用户数据

    我尝试在 Mac OS X 下使用 aio 函数进行异步文件 IO 但在将某种形式的用户数据输入信号处理程序时遇到问题 这是设置操作的代码 class aio context public aio context int fildes bo
  • std::function 中参数的自动动态转换

    我们有多态类 A 和 B 例如 struct A virtual A struct B final public A void f std cout lt lt f lt lt std endl 我想分配一个变量std function
  • 底层连接已关闭:接收时发生意外错误

    我来这里是因为我在通过 ftp 协议下载一些文件时遇到问题 这很奇怪 因为它偶尔会发生 甚至对于同一个文件也是如此 只是一个精确度 我正在下载非常大的文件 从 500 Mo 到 30Go 以下是我的函数返回的异常类型 抱歉 这是法语 Sys
  • 使用日期时间作为文件名并随后解析文件名?

    我正在将文件写入硬盘 文件名是这样构建的 String Format 0 yyyy MM dd hh mm ss txt DateTime Now 例如 文件名是 2010 09 20 09 47 04 txt 现在我想在下拉列表中显示这些
  • UWP 关闭信息亭模式

    我有一个发布到 Windows 应用商店的 UWP 应用程序 并且该应用程序可以启动进入信息亭模式 分配访问权限 它工作得很好 但我尝试在应用程序上创建一个按钮来关闭信息亭模式并返回到 Windows 登录屏幕 我尝试了文档中给出的代码 h
  • 为什么转发引用与右值引用具有相同的语法?

    我刚刚对这些 相当 新的功能做了一些研究 我想知道为什么 C 委员会决定为它们引入相同的语法 看来开发人员不必要浪费一些时间来理解它是如何工作的 而一种解决方案可以让我们思考进一步的问题 就我而言 它是从问题开始的 可以简化为 includ
  • 在 C++ 中的 Switch-Case 中执行 OR 运算

    你会如何在 C 中做到这一点 例如 如果用户按 ESC 或 q 或 Q 我试图触发程序退出 我尝试寻找它 但在 C 中没有找到它的语法 我知道如何使用 if else 来做到这一点 但是可以使用 switch case 来做到这一点吗 当然
  • C++中main函数可以调用自身吗?

    谁能告诉我下面的代码有什么问题吗 int main return main 我测试了一下 编译正确 它永远运行 幕后还有什么阴谋吗 TLDR 呼叫main导致未定义的行为 标准中使用的术语以及对程序员和编译器的影响似乎存在混淆 首先 单独的
  • 为什么 Windows 只允许一个应用程序访问网络摄像头? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我一直在尝试用 C 制作一个示例网络摄像头应用程序 我发现该应用程序无法同时运行 Skype 或 Oovoo 或任何其他应用程序运行 反之亦然 为什么
  • 在 '*' 标记之前编译“错误:预期 ')' 时出现多个相同错误

    我正在尝试用 C 语言编程 当我使用以下参数进行编译时 gcc D BSD SOURCE Wall ansi pedantic g tokenizer c FileOccur c WordList c wordstat c indexer
  • 在 C++ 中,将 float 转换为 double 再转换回 float 是否给出相同的值

    假设在下面的代码中 float f1 double d1 static cast

随机推荐

  • 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