我正在研究使用回调来访问图像。从MFC C ++应用程序调用DLL函数后。我想知道C ++中最好的做法是什么(最好是C ++ 11)。 我的dll声明是:
typedef void (CALLBACK * ImageCallback)(unsigned char *img, int width, int height, int channels);
class __declspec(dllexport) myInterface
{
public:
myInterface(void);
~myInterface(void);
void initializeInterface( ImageCallback stitching_callback);
bool combineImages(const std::vector<cv::Mat> images, cv::Mat &im_res, cv::Mat &im_res2);
private:
ImageCallback stcallback;
};
函数combineImages
需要一段时间来处理,我不能让GUI挂起直到它完成。我想使用回调函数来通知我的GUI C ++应用程序combineImages已返回并获取输出图像。
这是我的Cpp:
void myInterface::initializeInterface( ImageCallback st_callback)
{
stcallback = st_callback;
}
bool myInterface::combineImages(const std::vector<cv::Mat> images, cv::Mat &im_res, cv::Mat &im_res2)
{
// do some things
// modify outputs im_res and im_res2, I want to trigger the callback here
ImageCallback();
}
我的GUI是用MFC编写的,我使用这个dll的部分是:
void AutoDlg::OnBnClickedButton()
{
cv::Mat im1_orig, outimage1, outimage2;
// input images in images
myInterface Test;
test.initializeInterface();
Test.combineImages(images, outimage1, outimage2);
}
我不知道该怎么办。任何帮助,将不胜感激。我的问题是,在MFC代码中,我可以获得outimage1
和outimage2
,而不必让函数OnBnClickedButton
挂起,直到combineImages
返回