【问题标题】:Fire an event in C++/CLI from unmanaged C / C++ function从非托管 C/C++ 函数触发 C++/CLI 中的事件
【发布时间】:2012-12-07 20:55:47
【问题描述】:

我需要从 C++ 中的无人函数触发以 C++/CLI 编写的事件。

最好的方法是什么?

提前致谢。

【问题讨论】:

  • 传递一个函数指针,当被本机代码调用时,它会运行一个触发事件的方法:stackoverflow.com/a/2168265/17034
  • 具体来说,我需要从 C++ 类的成员函数中触发它。
  • “火”和“C++ 类”这两个词在同一个句子中没有任何意义。 Bjarne Stroustrup 从未被解雇。

标签: events c++-cli unmanaged


【解决方案1】:

我在 codeproject 上的一些帮助帖子中找到了一些帮助

想在这里发布它可能对其他人有用

#include "stdafx.h"
#include "windows.h"

using namespace System;
using namespace System::Runtime::InteropServices;

class Camera
{
public:
    Camera()
    {
    }
    ~Camera(){}
    void (*test)(void);
    void OnNewCameraData();
    void StartDataAcquisition();

};

void Camera::StartDataAcquisition()
{
    int i;
    while(i<10)
    {
        test();
        i++;
        Sleep(1000);
    }

}

delegate void FunctionToCallDelegate();

ref class CameraAdapter
{
private:
  Camera *_camera;
  FunctionToCallDelegate ^_Function;
public:
    CameraAdapter(FunctionToCallDelegate ^handler)
    {
        _Function = handler;
    }
    void Init()
    {
        _camera = new Camera();
        pin_ptr<FunctionToCallDelegate^> tmp = &_Function;
        _camera->test = (void (__cdecl *)(void))(Marshal::GetFunctionPointerForDelegate(_Function).ToPointer());
        _camera->StartDataAcquisition();
    }

    ~CameraAdapter()
    {
        delete _camera;
        _camera = 0;
    }
  void OnNewCameraData()
  {
      Console::WriteLine("Received Frame \n");

  }  
};


int main(array<System::String ^> ^args)
{

    FunctionToCallDelegate ^dsi;
    dsi += gcnew FunctionToCallDelegate(gcnew CameraAdapter(dsi), &CameraAdapter::OnNewCameraData);
    CameraAdapter ^camera = gcnew CameraAdapter(dsi);
    camera->Init(); 
    Console::ReadKey();
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    相关资源
    最近更新 更多