Jeg sidder og er ved at wrappe en C++ DLL, og løb pludselig ind i en mur da stødte på den her:
typedef struct layer_obj { char *classitem; int numclasses; int index; struct map_obj *map; } layerObj;
Mit problem er at jeg ikke har noget erklæret objektet 'map_obj' endnu. For at oprette min map_obj structure skal jeg nemlig have erklæret layerObj først.
I forhold til de øvrige structs jeg har erklæret, kan jeg her godt se at f.eks. layerObj-navnet ikke kun er angivet til sidst som de structs jeg kender, men at den også erklæres i starten som layer_Obj. Det samme gælder for mapObj. Og så er det her at min begrænsede C++ viden kommer til kort, og jeg ikke aner hvordan det skal wrappes i C#. Er der nogen der kan give mig nogle pointers til hvordan ovenstående skal forstås?
Jeg forstår ikke dit problem. Følgende kompilerer fint: unsafe struct layerObj { [MarshalAs(UnmanagedType.LPStr)]string classitem; int numclasses; int index; unsafe mapObj * map; }
I C++ skal du bruge en forward erklæring af den sidste type før den første typer for at få det til at compile, men det burde ikke være nødvendigt i C#.
Jeg er lidt usikker på hvad der sker med 2 struct som peger på hinanden som sende over i unmanaged kode.
driis: Jeg får nu at vide at der er tale om en cirkular reference, og det vil ikke compile. Omdøber jeg min struct til en class går det godt, men så får jeg ikke de rigtige værdier igennem fra C++ dll'en.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.