gpt4 book ai didi

events - 从非托管 C/C++ 函数在 C++/CLI 中触发事件

转载 作者:行者123 更新时间:2023-12-03 18:43:58 24 4
gpt4 key购买 nike

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

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

提前致谢。

最佳答案

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

关于events - 从非托管 C/C++ 函数在 C++/CLI 中触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com