微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

事件 – 从非托管C/C++函数在C/C++LI中触发事件

我需要从c中的无人函数触发用C/C++LI编写的事件.

做这个的最好方式是什么?

提前致谢.

解决方法

我在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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐