C# の acdbEntGet と acdbEntGetX のラッパーが必要です。これらの関数は accore.dll (AutoCAD 2014) にあり、私はこれを試しました:
[DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto, EntryPoint = "acdbEntGetX")]
public static extern IntPtr acdbEntGetX(Int64 e, IntPtr app);
[DllImport("accore.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto, EntryPoint = "acdbEntGet")]
public static extern IntPtr acdbEntGet(Int64 e);
戻り値 (IntPtr) は、両方の関数から常に 0 です。エラーや例外はありません。
ほとんどすべての ObjectARX C++ 関数は C# マネージ ライブラリにラップされていますが、これら 2 つの関数はそうではありません。なぜだろう。
(entmake)
ああ、なぜそれらの関数が必要なのかと誰かが尋ねるかもしれません...答えは、変更せずに直接与えることができるリストをLispに返したいということです。これは acdbEntGet と acdbEntGetX で行われます。「手動で」リストを作成することはオプションですが、それは私が望んでいることではありません (そして、はい、C# ObjectARX でリストを作成する方法を知っています) :)
編集:これらの関数がC++で定義されている方法は次のとおりです
struct resbuf *acdbEntGetX (const ads_name ent, const struct resbuf *args);
struct resbuf *acdbEntGet (const ads_name ent);
struct resbuf
adsdef.h で定義された連結リストです。
struct resbuf {
struct resbuf *rbnext;
short restype;
union ads_u_val resval;
};
ads_name
2 つの 64 ビット整数の配列です (記憶が正しければ)