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. Большое спасибо за ответ! –
IntPtr의 다른 유형을 구분하는 유형 확인이 없기 때문에 이러한 모든 유형의 IntPtr을 사용하면 곧 악몽이됩니다. 안전하지 않은 struct *를 사용하는 것이 좋습니다. (aiNode와 같은 각 유형을 구조체 유형으로 정의한 다음 안전하지 않은 aiNode *를 사용하십시오) –