J'essaie d'utiliser le marshalling en C#. En C++ J'ai ce struct:C#: Pointeur vers la structure à l'intérieur de la structure
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;
}
Alors, C# eqvivalent est:
[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;
}
Mais beaucoup sur cette struct sont gérées (aiNode, aiMesh, aiLight), etc. Donc, j'ai cette erreur :
Cannot take the address of, get the size of, or declare a pointer to a managed type ('Assimp.aiNode')
Des idées sur la façon de résoudre ce problème?
Господи, что за изврат ... лучше взять C++ \ CLI. Большое спасибо за ответ! –
Utiliser IntPtr pour tous ces types devient rapidement un cauchemar, car il n'y a pas de vérification de type séparant les différents types de IntPtr. Il est préférable d'utiliser une struct * dangereuse. (définissez chaque type, tel que aiNode, en tant que type struct, puis utilisez un aiNode non sécurisé *) –