我在C#中使用graphviz作为库。我找到了一个解决方案,可以帮助从gvc.dll和cgraph.dll here导入函数。
我想要做的是在渲染图中获取节点的位置。在library guide中研究之后,我在RenderImage函数中使用了这个解决方案:
if (gvLayout(gvc, g, layout) != SUCCESS)
throw new Exception("Layout failed.");
if (gvRender(gvc, g, "dot", IntPtr.Zero) != SUCCESS)
throw new Exception("Render failed.");
IntPtr np = agnode(g, "1", 0);
if (np == IntPtr.Zero)
throw new Exception("Node not found.");
string pos = agget(np, "pos");
我定义了agget函数如下:
[DllImport(LIB_GRAPH, CallingConvention = CallingConvention.Cdecl)]
public static extern string agget(IntPtr node, string attribute);
一切似乎都很好,但是在执行agget函数后,调试会因信息而中止:执行过程意外退出。但没有例外被抛出。
我的代码出了什么问题? 也许我可以使用像:ND_pos?但我找不到它,我不知道如何在C#中声明它(使用DllImport)。 或者也许在渲染图形后我可以从点文件中检索信息?如果是这样,我该怎么做?
答案 0 :(得分:0)
我使用gvRenderFile来解决它。 我将渲染的点文件导出到另一个点文件,我从中读取。
if (gvRenderFilename(gvc, g, "dot", path) != SUCCESS)
throw new Exception("Render failed.");
string text = File.ReadAllText(path);