gpt4 book ai didi

c - 为什么 Graphviz 在 gvLayout 上失败?

转载 作者:行者123 更新时间:2023-12-03 18:45:46 26 4
gpt4 key购买 nike

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

我将一个简单的函数组合在一起,我可以从 C# 程序中调用该函数,该函数采用 DOT 字符串、输出格式和文件名,并使用 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");

我错过了什么?

编辑

如果有可能与我编译代码的方式有关,这是我正在使用的命令:
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

我一直在关注 this tutorial这解释了如何使用 Graphviz 作为库,所以我链接到它列出的 .lib 文件。

最佳答案

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

关于c - 为什么 Graphviz 在 gvLayout 上失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1955582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com