C#でマーシャリングを使用しようとしています。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)だから、私はこのエラーを持って管理されている。
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#のeqvivalentがある:C++では、私は、この構造体を持っています:
Cannot take the address of, get the size of, or declare a pointer to a managed type ('Assimp.aiNode')
どのようにこの問題を解決するためのアイデアですか?
C++ \ CLI。C++ \ CLI。 Большоеспасибозаответ! –
IntPtrの種類を区別する型チェックがないため、これらのすべての型に対してIntPtrを使用することは、まさに悪夢となります。安全でない構造体*を使う方が良いでしょう。 (aiNodeなどの各タイプを構造体タイプとして定義し、安全でないaiNode *を使用する) –