【发布时间】:2018-03-22 21:18:28
【问题描述】:
我在将 C++/CLI 对象指针传递给本机对象时遇到了一些问题。
全图如下:
- 总的来说,我是 C++ 新手(注定要失败)
- 我正在使用第三方原生 C++ 库来连接 blackmagic IO 显卡。在 API 中有一个非常方便的方法来传递对象的指针,当它们被卡捕获时,该对象将处理帧回调: SetCallback(指向实现接口的对象的指针)。
- 在上面的 SetCallback(Pointer) 中,我想将指针传递给我的 C++/CLI 对象。当我这样做时
我得到:
cannot convert argument 4 from 'CLIInterop::Wrapper ^*' to 'IDeckLinkInputCallback *'
我的最终目标是处理从 C++ 到 C++/CLI 的回调,此时将帧传递给 WPF(如果我能做到那么远)
涉及的代码行是:
从 CLIInterop::Wrapper 对象调用
d_Controller->GetDevice()->StartCapture(0, nullptr, true, this);
原生 C++ 项目中的方法头:
__declspec(dllexport) bool DeckLinkDevice::StartCapture(unsigned int videoModeIndex, IDeckLinkScreenPreviewCallback* screenPreviewCallback, bool applyDetectedInputMode, IDeckLinkInputCallback* callbackHandler);
救命!
【问题讨论】:
-
您必须声明一个实现该接口的本机 C++ 类。您可以使用
gcroot<ManagedClass>或 stackoverflow.com/a/2973278/17034 从本机类返回托管代码