2010-08-18 2 views
1

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

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

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

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

где определяется MyObjHandle:

typedef struct obj_t { 

    shared_ptr<MyObject> objPtr; 

} MyObjHandle ; 

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

ответ

0

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

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

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

Смежные вопросы