0

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 resbufadsdef.h で定義された連結リストです。

struct resbuf {                                                  
        struct resbuf *rbnext; 
        short restype;
        union ads_u_val resval;
};

ads_name2 つの 64 ビット整数の配列です (記憶が正しければ)

4

2 に答える 2