托管C++——在C#中使用C++
下面就用一个完整的实例来详细说明怎样用托管C++封装一个C++类以提供给C#使用。
现有一个Detector类需要使用,首先,要创建一个托管C++的DLL工程DAADll,然后在里面添加下面的代码:
DAADll.h
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/contrib/contrib.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include "../libmi_dpm/face_detector.hpp" #pragma comment(lib, "../lib/lib3000fps.lib")
#pragma comment(lib, "../lib/liblinear.lib")
#pragma comment(lib, "../lib/libmi_dpm.lib")
//#pragma comment(lib, "MSCOREE.lib") using namespace System;
using namespace System::Collections::Generic;
using namespace System::Text;
using namespace System::Drawing; namespace DAADLL{
public ref class daaDll
{
public:
daaDll();
~daaDll();
!daaDll();
Int32 detectFasterMerge(cv::Mat& img);
Int32 detectFasterMerge(Image^ img);
void clean();
private:
mi_dpm::Detector * face_det;
};
}
这样就可以引用Detector类;
在DAADll.cpp中加入需要调用的功能
#include "daaDll.h" #include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/contrib/contrib.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include "BitmapConverter.h"
#include "ImageHelper.h" using namespace System::IO; using namespace DAADLL;
using namespace DAADLL::Util; daaDll::daaDll()
{
face_det = new mi_dpm::Detector();
face_det->detectInit();
} daaDll::~daaDll()
{
this->!daaDll();
} daaDll::!daaDll()
{
face_det->detectClear();
if (face_det != NULL)
{
free(face_det);
face_det = NULL;
}
} void daaDll::clean()
{
face_det->detectClear();
} Int32 daaDll::detectFasterMerge(cv::Mat& cvImg)
{
std::vector<cv::Rect> rects;
std::vector<float> scores;
std::vector<int> picked;
if (cvImg.channels() >= )
{
cv::cvtColor(cvImg, cvImg, CV_BGR2GRAY);
cv::waitKey();
}
picked = face_det->detectFasterMerge(cvImg, rects, scores);
int n = picked.size();
for (int i = ; i < n; i++)
{
int idx = picked[i];
cv::rectangle(cvImg, rects[idx], cv::Scalar(, , ), );
}
cv::imwrite("tmp_timg_FastMerge.jpg", cvImg);
cv::waitKey();
return n;
} Int32 daaDll::detectFasterMerge(Image^ img)
{
cv::Mat cvImg = BitmapConverter::ToMat(img);
return detectFasterMerge(cvImg);
}
最后在C#项目(我这边是主界面winform)中引用创建的DAADll项目即可。
托管C++——在C#中使用C++的更多相关文章
- 将WCF寄宿在托管的Windows服务中
在我之前的一篇博客中我介绍了如何发布WCF服务并将该服务寄宿于IIS上,今天我再来介绍一种方式,就是将WCF服务寄宿在Windows服务中,这样做有什么好处呢?当然可以省去部署IIS等一系列的问题,能 ...
- 浅谈 .NET 中的对象引用、非托管指针和托管指针 理解C#中的闭包
浅谈 .NET 中的对象引用.非托管指针和托管指针 目录 前言 一.对象引用 二.值传递和引用传递 三.初识托管指针和非托管指针 四.非托管指针 1.非托管指针不能指向对象引用 2.类成员指针 五 ...
- 斗地主你什么时候才会托管?(.NET中的托管于非托管)
文章部分引自<.NET4.0面向对象编程漫谈(基础篇)>第1章.NET面向对象编程基础(作者:金旭亮) 无意间看到一位四五岁左右小朋友在玩斗地主,总开始到结束,她一直都在使用“提示”(托管 ...
- 如何把遗留的Java应用托管在Service Fabric中
一.概述 众所周知,微服务化尤其对遗留系统进行微服务化一般采用"Lift and Shift"的模式进行. Service Fabric作为一个微服务托管平台,不仅仅可以在上面跑. ...
- 如何托管ASP.NET Core应用到Windows Service中
(此文章同时发表在本人微信公众号"dotNET开发经验谈",欢迎右边二维码来关注.) 题记:正在构思一个中间件的设计,考虑是否既可以使用最新的技术,也可以兼顾传统的部署模式.所以有 ...
- 浅谈 .NET 中的对象引用、非托管指针和托管指针
目录 前言 一.对象引用 二.值传递和引用传递 三.初识托管指针和非托管指针 四.非托管指针 1.非托管指针不能指向对象引用 2.类成员指针 五.托管指针 前言 本文主要是以 C# 为例介绍 .NET ...
- 如何在AWS中为自己的S3托管站点添加SSL/TSL证书(https)
概要 利用AWS的S3服务托管静态网站后,如何将自己的域名与该站点绑定,并为此域名提供SSL/TSL证书(https). 面向人群 已经掌握如何利用S3服务托管静态网站. 已经拥有自己的域名. 希望为 ...
- .net 中的托管与非托管
托管代码 托管代码就是Visual Basic .NET和C#编译器编译出来的代码.编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码.中间语言被封装在一个叫程序集(assemb ...
- [转]在C#中使用托管资源和非托管资源的区别,以及怎样手动释放非托管资源:
托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源.托管资源的回收工作是不需要人工干预的,有.NET运行库在合适调用垃圾回收器进行回收. 非托管资源指的是.NET不知道如何回 ...
随机推荐
- python 基础 1.5 python数据类型(四)--字典
一.python 数据类型--字典 1.用字符串存储信息,如:存储“姓名,身高,性别”: In [1]: info='Tom 170 M' //字符串存储信息 In [3]: info[0:3] // ...
- ubuntu 安装codeblocks
本文转载于:http://blog.csdn.net/i_fuqiang/article/details/9749225 1.安装gcc: sudo apt-get install build-ess ...
- jQuery学习笔记(9)--jquery中的事件--$(document).ready()
1.$(document).ready()方法是事件模块中最重要的一个函数,可以极大地提高web应用程序的相应速度. 2.执行时机:DOM就绪后就会执行,而javascript中window.onlo ...
- runsv
runsv(8) manual page http://smarden.org/runit/runsv.8.html Name runsv - starts and monitors a servic ...
- 我的Android进阶之旅------>真正在公司看几天代码的感触
仅以此文来回顾这一周我的工作情况,以及由此而触发的感想. ============================================================= 来到新公司5天了, ...
- Light OJ 1005 - Rooks 数学题解
版权声明:本文作者靖心.靖空间地址:http://blog.csdn.net/kenden23/,未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...
- CF148D. Bag of mice(概率DP)
D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- 【python】使用python发送文本内容邮件
下面提供了一个使用python做的发送文本内容的邮件代码,能够在邮件内容中设置文字颜色,大小,换行等功能. #auther by zls #_*_coding:utf-8_*_ import sys ...
- ubuntu 网络配置及ssh文件传输
一.ubuntu网路配置 参考http://www.cnblogs.com/rusty/archive/2011/04/06/2007139.html /etc/network/interfaces ...
- VS调试的问题
调试Vs,使用本地IIS也不行,使用外部服务器也不行,最后运行VS2013以管理员身份就可以了