我正在尝试编写一个将使用 DirectShow 的小型库。该库将由 .NET 应用程序使用,因此我认为最好用 C++/CLI 编写它。
但是,我在这条线上遇到了麻烦:
HRESULT hr = CoCreateInstance( CLSID_FilterGraph,
NULL,
CLSCTX_INPROC_SERVER,
IID_IGraphBuilder,
(void**)(&graphBuilder) ); //error C2440:
在哪里graphBuilder
声明:
public ref class VideoPlayer
{
public:
VideoPlayer();
void Load(String^ filename);
IGraphBuilder* graphBuilder;
};
如果我正确理解了这个页面,我可以*/&
像往常一样在我的 C++/CLI 库中使用指向非托管内存的“本机”指针;^
用于表示指向托管对象的指针。但是,此代码产生:
错误 C2440:“类型转换”:无法从“cli::interior_ptr”转换为“void **”
该错误表明它graphBuilder
被认为是一个'cli::interior_ptr<Type>'
. 那是托管内存的指针/句柄,不是吗?但它是一个纯本机指针。我不想将指针传递给期望句柄的方法,反之亦然 - 我只是想将它存储在我的托管类中)如果是这样,我怎么说graphBuilder
是“传统”指针?
(这个问题很相似,但答案是,要使用 pin_ptr,我看不到对我有帮助,因为它不能成为我班级的成员)