2010-08-18 5 views
1

Comment est-il possible de rassembler un shared_ptr de code C++ non managé en C#?.NET Interop et TR1 shared_ptr

I ont une fonction en C++ (exposée à travers les liaisons C) qui va allouer une nouvelle MyObject et renvoyer un pointeur vers elle par l'intermédiaire d'un shared_ptr.

En C++ je peux appeler la fonction:

MyObjHandle* ref = NULL: 
GetMyObject(&ref); // double ptr... 

où MyObjHandle est défini:

typedef struct obj_t { 

    shared_ptr<MyObject> objPtr; 

} MyObjHandle ; 

Comment puis-je Pinvoke l'appel à GetMyObject de C#? Je l'ai fait l'évidence de simplement définir la structure MyObjectHandle à peu près comme cela est en C# expcept Je défini le membre ObjPtr comme IntPtr. Cela a lamentablement échoué avec une erreur AccessViolationException. J'ai essayé quelques autres variantes de PInvoke qui ont également échoué. Je n'arrive pas à trouver d'échantillons interop avec shared_ptr et C#. Toute aide appréciée ...

Répondre

0

Vous ne pouvez récupérer le MyObjHandle comme IntPtr en C#. Vous n'aurez jamais accès à l'objPtr interne au sein de la structure. La signature de PInvoke devrait ressembler à:

// régler le type de retour au besoin [DllImport (...)] int GetMyObject (sur IntPtr pMyObjHandle);

Vous pouvez ensuite passer le retour pMyObjHandle dans toute autre méthode PInvoke attendent un MyObjHandle * comme paramètre.