Events 在C+中触发事件+/CLI来自非托管C/C++;功能 我需要用C++中的无人值守函数来触发C++中的事件。p>

Events 在C+中触发事件+/CLI来自非托管C/C++;功能 我需要用C++中的无人值守函数来触发C++中的事件。p>,events,c++-cli,unmanaged,Events,C++ Cli,Unmanaged,最好的方法是什么 提前谢谢。我从codeproject上的一些帮助帖子中得到了一些帮助 想把它贴在这里对其他人可能有用 #include "stdafx.h" #include "windows.h" using namespace System; using namespace System::Runtime::InteropServices; class Camera { public: Camera() { } ~Camera(){} void

最好的方法是什么


提前谢谢。

我从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;
}
#包括“stdafx.h”
#包括“windows.h”
使用名称空间系统;
使用名称空间System::Runtime::InteropServices;
类摄像机
{
公众:
摄影机()
{
}
~Camera(){}
无效(*测试)(无效);
void OnNewCameraData();
void StartDataAcquisition();
};
无效摄影机::StartDataAcquisition()
{
int i;
而(itest=(void(uu cdecl*)(void))(Marshal::GetFunctionPointerForDelegate(_Function).ToPointer());
_摄像头->开始数据采集();
}
~CameraAdapter()
{
删除摄像头;
_摄像机=0;
}
void OnNewCameraData()
{
控制台::WriteLine(“接收到的帧\n”);
}  
};
int main(数组^args)
{
调用委托^dsi的函数;
dsi+=gcnew FunctionToCallDelegate(gcnew CameraAdapter(dsi)和CameraAdapter::OnNewCameraData);
CameraAdapter^camera=gcnew CameraAdapter(dsi);
摄像头->初始化();
控制台::ReadKey();
返回0;
}

<代码> >传递一个函数指针,当被本地代码调用时,运行一个触发事件的方法:具体来说,我需要从C++类的成员函数中导出这个词。“Fire”和“C++类”这两个词在同一个句子中并不意味着什么。Bjarne Stroustrup从未被解雇。