.NET Interop и TR1 shared_ptr - PullRequest
       15

.NET Interop и TR1 shared_ptr

1 голос
/ 18 августа 2010

Как можно преобразовать shared_ptr из неуправляемого кода C ++ в C #?

У меня есть функция в C ++ (предоставляемая через привязки C), которая будет выделять новый MyObject и возвращать указатель на него через shared_ptr.

В C ++ я могу вызвать функцию:

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

где MyObjHandle определено:

typedef struct obj_t {

   shared_ptr<MyObject> objPtr;

} MyObjHandle ;

Как бы я вызвал вызов GetMyObject из C #? Я сделал очевидное простое определение структуры MyObjectHandle, как и в C #, за исключением того, что я определил член objPtr как IntPtr. Это с треском провалилось с ошибкой AccessViolationException. Попробовал пару других вариантов PInvoke, которые также не удалось. Я не могу найти какие-либо примеры взаимодействия с shared_ptr и C #. Любая помощь приветствуется ...

1 Ответ

0 голосов
/ 18 февраля 2011

Вы можете получить MyObjHandle только как IntPtr в C #.У вас никогда не будет доступа к внутреннему объекту в структуре.Подпись pinvoke должна выглядеть следующим образом:

// корректировать тип возвращаемого значения по мере необходимости [DllImport (...)] int GetMyObject (out IntPtr pMyObjHandle);

Затем можно передать pMyObjHandle обратнолюбые другие методы pinvoke, ожидающие MyObjHandle * в качестве параметра.

...