将 C++/CLI 对象指针传递给本机对象方法
Passing C++/CLI object pointer to a native object method
我在将 C++/CLI 对象指针传递到本机对象时遇到一些问题。
整个图片如下:
- 我是一般C++新手(注定要失败(
- 我正在使用第三方本机C++库来连接黑魔术IO视频卡。在 API 中,有一种非常方便的方法来传递对象的指针,该指针将在卡捕获帧回调时处理帧回调:SetCallback(指向实现接口的对象的指针(。
- 在上面的 SetCallback(指针(中,我想将指针传递给我的 C++/CLI 对象。当我这样做时我得到:
cannot convert argument 4 from 'CLIInterop::Wrapper ^*' to 'IDeckLinkInputCallback *'
我的最终目标是处理从C++到 C++/CLI 的回调,此时将帧传递给 WPF(如果我能走那么远的话(
调用的代码行是:
从 CLIInterop 调用::包装器对象
d_Controller->GetDevice()->StartCapture(0, nullptr, true, this);
本机C++项目中的方法标头:
__declspec(dllexport) bool DeckLinkDevice::StartCapture(unsigned int videoModeIndex, IDeckLinkScreenPreviewCallback* screenPreviewCallback, bool applyDetectedInputMode, IDeckLinkInputCallback* callbackHandler);
帮助!
清楚地表明您的this
指针不是类型IDeckLinkInputCallback
d_Controller->GetDevice()->StartCapture(0, nullptr, true, this);
^ this pointer is not a type IDeckLinkInputCallback
正如您所说,您已经在this
指针类中实现了接口IDeckLinkInputCallback
。仔细检查您是否已完成。与其从类的成员函数调用StartCapture
,不如从外部调用它并提供对象的完整地址this
而不是指针。
当
需要本机指针时,不能只传递托管引用("hat 指针"^(。C++/CLI 的全部意义在于可以创建"粘合"代码,例如您缺少的内容。
基本上,您必须创建一个实现本机接口的本机类,该类可能包含您回调的托管引用。我不熟悉BlackMagic视频卡的界面(我曾经不得不使用DVS视频卡,但它们的软件界面可能很难比较(,但是这种包装器的一般逻辑类似于这样:
class MyDeckLinkInputCallback : IDeckLinkInputCallback
{
public:
MyDeckLinkInputCallback(CLIInterop::Wrapper^ wrapper)
{
_wrapper = wrapper;
// initialize to your heart's content
}
private:
CLIInterop::Wrapper^ _wrapper;
public:
// TODO implement IDeckLinkInputCallback properly; this is just a crude example
void HandleFrame(void* frameData)
{
// TODO convert native arguments to managed equivalents
_wrapper->HandleFrame(...); // call managed method with converted arguments
}
};
相关文章:
- 在这种情况下,java对象是否可以调用本机函数
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- 链接节点本机模块中的提升库,对象文件需要替代库版本
- 从本机代码返回到托管代码会损坏返回的对象
- 如何将类对象传递给 jni 本机方法
- 将 C++/CLI 对象指针传递给本机对象方法
- 如何在V8中为C 本机对象实现属性枚举器
- 将ref类对象(Uri^)作为本机指针参数(IUriRuntimeClass*)传递
- 如何从节点本机插件正确创建Buffer对象
- JNI:MAP jobject到本机C 对象
- 使用本机/C++代码在VS2010中创建简单COM对象的最简单方法是什么
- 反向调用,从本机 C/C++ DLL 调用 C# 对象的方法,而无需 CLI/CLR
- 使用Android本机Binder发送自定义对象
- 将Mat对象从androidjava传递到本机cpp部分
- 从 CLI 包装器检索本机对象
- 通过静态变量从本机代码访问有状态托管对象
- 如何在本机插件中创建node.js错误对象
- 将本机指针强制转换为托管对象
- Android JNI本机代码中的c++对象调用垃圾收集吗?
- 在本机c++的托管dll中使用对象