ここに示すように、Graphviz を P/Invoking しています。私がそのブログ エントリを書いたとき、コードは問題なく動作しました。HttpModule
今、そのコードを使用して Graphviz グラフをレンダリングするをまとめていますが、 AccessViolationException
at agmemread
.
// Native signature
Agraph_t agmemread(char *);
// P/Invoke Signature
[DllImport(LIB_GRAPH)]
private static extern IntPtr agmemread(string data);
// Usage
IntPtr g = agmemread(data);
私が言ったように、これは以前は完全に機能していました。しかし今、私は自分のコードを何にも動作させることができません。同じコードに基づく古い Graphviz アプリでさえ、もう機能しません。
これを引き起こす可能性のある変更は何ですか?Graphviz の新しいバージョンなどもダウンロードしていないので、DLL はすべて同じです。
編集:に変更しようとしstring
ましStringBuilder
たが、同じ結果が得られました。次に、MarshalAs
属性を追加しました。
static extern IntPtr agmemread([MarshalAs(UnmanagedType.LPWStr)] string data);
これで は取得できなくなりましたAccessViolationException
が、Graphviz は文字列を正しく読み取ることができず、null ポインターを返します。