2

C# でマーシャリングを使用しようとしています。C++ には、次の構造体があります。

struct aiScene
{
    unsigned int mFlags;
    C_STRUCT aiNode* mRootNode;
    unsigned int mNumMeshes;
    C_STRUCT aiMesh** mMeshes;
    unsigned int mNumMaterials;
    C_STRUCT aiMaterial** mMaterials;
    unsigned int mNumAnimations; 
    C_STRUCT aiAnimation** mAnimations;
    unsigned int mNumTextures;
    C_STRUCT aiTexture** mTextures;
    unsigned int mNumLights;
    C_STRUCT aiLight** mLights;
    unsigned int mNumCameras;
    C_STRUCT aiCamera** mCameras;
}

したがって、C# の同等物は次のとおりです。

[StructLayout(LayoutKind.Sequential)]
public struct aiScene
{
    public uint mFlags;
    public unsafe aiNode* mRootNode;
    public uint mNumMeshes;
    public unsafe aiMesh** mMeshes;
    public uint mNumMaterials;
    public unsafe aiMaterial** mMaterials;
    public uint mNumAnimations;
    public unsafe aiAnimation** mAnimations;
    public uint mNumTextures;
    public unsafe aiTexture** mTextures;
    public uint mNumLights;
    public unsafe aiLight** mLights;
    public uint mNumCameras;
    public unsafe aiCamera** mCameras;
}

しかし、この構造体の多くは管理されています ( aiNode、aiMesh、aiLight ) など。したがって、次のエラーが発生します。

マネージド型 ('Assimp.aiNode') のアドレスを取得したり、サイズを取得したり、ポインタを宣言したりすることはできません

この問題を解決する方法についてのアイデアはありますか?

4

2 に答える 2

3

これは、何をしようとしているのかによって非常に複雑になる可能性があります。ただし、作業中は、このように C# コード内の各ポインターを宣言するのに役立ちます。これは、今日ここで説明した非常に便利な IntPtr を使用します。:)

これにより、コードが魔法のように機能するわけではないことに注意してください。それについて意見を述べる前に、何が起こっているのかをもっと見る必要があります.

public struct aiScene
{
    public uint Flags;
    public IntPtr RootNode;
    ...
}
于 2009-07-19T02:34:51.043 に答える