Próbuję napisać małą bibliotekę, która będzie używać DirectShow. Ta biblioteka ma być używana przez aplikację .NET, więc pomyślałem, że najlepiej będzie napisać ją w C++/CLI.Jak mogę użyć "natywnego" wskaźnika w klasie odniesienia w C++/CLI?
mam problemy z tej linii Jednakże:
HRESULT hr = CoCreateInstance( CLSID_FilterGraph,
NULL,
CLSCTX_INPROC_SERVER,
IID_IGraphBuilder,
(void**)(&graphBuilder)); //error C2440:
Gdzie graphBuilder
jest zgodność:
public ref class VideoPlayer
{
public:
VideoPlayer();
void Load(String^ filename);
IGraphBuilder* graphBuilder;
};
Jeśli jestem zrozumienia this page poprawnie, mogę wykorzystać */&
jak zwykle do określenia „natywny” wskaźniki do niezarządzanej pamięci w mojej bibliotece C++/CLI; ^
służy do oznaczenia wskaźnika do zarządzanego obiektu. Jednak ten kod produkuje:
błędu C2440: 'typu cast': nie można przekonwertować z 'cli :: interior_ptr' do 'void **'
Błąd sugeruje, że graphBuilder
jest uważana za a 'cli::interior_ptr<Type>'
. To jest wskaźnik/uchwyt do zarządzanej pamięci, prawda? Ale jest to natywny wskaźnik. Nie próbuję przekazać wskaźnika do metody oczekującej uchwytu lub odwrotnie - po prostu chcę przechowywać ją w mojej zarządzanej klasie). Jeśli tak, jak mogę powiedzieć, że jest to "tradycyjny" wskaźnik?
(This question jest podobna, ale odpowiedź, aby użyć pin_ptr, nie widzę pomaga mi, ponieważ nie może być członkiem mojej klasy)
Sam wskaźnik może się poruszać podczas ustawiania - zupełnie to przegapiłem! Dziękuję Hans! – sebf
Tak więc, aby było jasne, mówisz, że nie możesz zachować niezarządzanego wskaźnika jako nawet wewnętrznego członka zarządzanej klasy? Próbuję obrócić głowę, jak mam łączyć się między typami zarządzanymi i niezarządzanymi w spójny sposób, jeśli to prawda. –
Nie, w porządku. OP stworzył wskaźnik do elementu obiektu & graphBuilder. –