DirectShow'u kullanacak küçük bir kitaplık yazmaya çalışıyorum. Bu kütüphane bir .NET uygulaması tarafından kullanılmalıdır, bu yüzden C++/CLI'ye yazmanın en iyi olacağını düşündüm.C++/CLI'de bir referans sınıfındaki 'yerel' işaretçiyi nasıl kullanabilirim?
HRESULT hr = CoCreateInstance( CLSID_FilterGraph,
NULL,
CLSCTX_INPROC_SERVER,
IID_IGraphBuilder,
(void**)(&graphBuilder)); //error C2440:
graphBuilder
ilan edilir:
Ben ancak bu hat ile sorun yaşıyorum Ben doğru this page anlama am mı
public ref class VideoPlayer
{
public:
VideoPlayer();
void Load(String^ filename);
IGraphBuilder* graphBuilder;
};
, ben göstermek için her zamanki gibi */&
kullanabilirsiniz 'yerli' C++/CLI kitaplığımdaki yönetilmeyen belleğe işaretçiler; Yönetilen bir nesneye işaretçiyi göstermek için ^
kullanılır. Ancak bu kod üretir:
hata C2440: 'türü dökme':
hata graphBuilder
olarak kabul edilir olduğunu göstermektedir 'hükümsüz **' için 'cli :: interior_ptr' dan dönüştüremezsiniz 'cli::interior_ptr<Type>'
. Bu, yönetilen belleğin bir göstergesi/tanıtıcısı değil mi? Ama bu saf bir yerli işaretçidir. İşaretçiyi bir tanıtıcıya ya da tam tersi bir yönteme iletmeye çalışmıyorum - sadece bunu yönetilen sınıfımda saklamak istiyorum) Eğer öyleyse, graphBuilder
'geleneksel' işaretçiyi nasıl söyleyebilirim?
(This question benzerdir ama benim sınıfın üyesi olamaz gibi cevap bir pin_ptr kullanmak, ben, bana yardım görmüyorum)
İşaretçi, ayarlanmışken hareket edebilir - bunu tamamen özledim! Teşekkür ederim Hans! – sebf
Yani, sadece açık olmak gerekirse, yönetilmeyen bir işaretçiyi yönetilen bir sınıfın dahili üyesi olarak bile tutamayacağınızı söylüyorsunuz? Kafamı, bu doğruysa, herhangi bir tutarlı şekilde yönetilen ve yönetilmeyen türler arasında nasıl köprü kurmam gerektiği üzerine sarmayı denedim .. –
Hayır, sorun değil. OP, nesnenin bir üyesi ve graphBuilder için bir işaretçi oluşturdu. –