最近做项目,需要将C++算法封装成dll,给C#调用,之前没接触过C#,现学一波,只做了dll并用C#测试了下,运行成功。记录下来过程,供大家参考。
编程环境:VS2013+opencv2.4.13
步骤:
1.创建C++项目,制作dll.
(1)打开vs,新建->项目->win32控制台项目


(2)选择dll,点击完成

(3)生成了c++项目。默认包含几个cpp和h文件。

(4)打开Win32Project1.cpp文件,编写如下函数。OpenCV中包含目录、库目录、链接器附加依赖项配置这里不再详述。

代码如下:

#include "stdafx.h"
#include "Win32Project2.h"
#include <iostream>
#include <string>
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>using namespace cv;char* _stdcall show(char* name)
{Mat img = imread(name);if (img.empty()){return "can not open";}else{imshow("test", img);waitKey(0);return "open!";}
}

(5)右键头文件文件夹-添加-新建项,创建Win32Project1.h文件

代码:

#pragma once
#include <iostream>
extern "C" _declspec(dllexport) char * _stdcall show(char* name);

(6)之后就可以生成解决方案了,注意这里选择的“Debug”模式,平台是“Win32”。生成后的dll和lib文件在C#项目对应文件夹的debug文件夹下(先建立c#项目,一会附图添加dll和lib)
2.创建c#项目
(1)打开vs,如下设置,

(2)创建好了之后,需要将第一步生成的dll放到该c#文件夹下,例如c#中我选择的是“debug”模式,注意平台也对应Win32,如下,将dll放到了文件夹下。

(3)在c#的cs文件中调用dll,在C#中Program.cs填写如下代码

代码:

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;namespace c.demo2
{class Program{[DllImport(@"Win32Project1.dll", EntryPoint = "show", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]extern  static IntPtr show([MarshalAs(UnmanagedType.LPStr)]string name);static void Main(string[] args){IntPtr name = show("D:\\1.jpg");//图片路径string check = Marshal.PtrToStringAnsi(name);Console.WriteLine(check);Console.ReadKey();}}
}


程序运行成功!
参考链接
如需制作C++版dll,请参考本人另一篇博客:
参考链接2

c++创建包含opencv的dll供C,C#调用相关推荐

  1. C++代码封装成dll供C#中调用、调用dll无可用源

    C#工程不可以直接调用C++的头文件和Lib库等 所以在程序中C#需要调用的现象,先将C++的东西封装成动态链接库,再调用 若调用dll时显示:无可用源调用,说明导入的DLL路径不对. 静态库和动态库 ...

  2. c/c++编写dll供其他语言调用

    范例 就以md5为例吧,首先去github搜索md5,选一个用c或者c++写的md5. 比如:https://github.com/chinaran/Compute-file-or-string-md ...

  3. opencv通过dll调用matlab函数,图片作为参数

    [blog 项目实战派]opencv通过dll调用matlab函数,图片作为参数                   前文介绍了如何"csharp通过dll调用opencv函数,图片作为参数 ...

  4. matlab将cpp编译为dll,Matlab函数编译成dll供Cpp调用的方法图解教程

    曾经实现过将matlab函数编译成dll供Cpp调用,这篇文章的目的是对新增的面向对象的的扩展mwArray进行讲解,matlab很容易和C/C++联合起来使用. 以前做过matlab7与c++的混合 ...

  5. wxWidgets:创建应用程序的 DLL

    wxWidgets:创建应用程序的 DLL wxWidgets:创建应用程序的 DLL 问题 创建一个 wxWidgets DLL 应用程序,支持 GUI 头文件:wxWidgetsDLL.h 源文件 ...

  6. tkinter如何lable重复显示到同一行中_如何创建包含 CAD 导入和选择的仿真 App

    在使用 COMSOL 软件二次开发的过程中,你可能会遇到这样的问题:如何使用 App 开发器创建可以处理 CAD 导入并能让用户交互式选择边界条件的仿真 App?我需要了解编程吗?今天我们将为您介绍在 ...

  7. 使用C++控制台程序或Python调用Dll创建Qt界面(dll中创建QApplication,qtwinmigrate的使用)

    目录 理论 构建DLL 使用Python进行调用 使用C++控制台程序进行调用 理论 在Windows下,可能要用MFC或C#或Java,python调用一个插件,这个插件是一个dll,可以弄一个Qt ...

  8. lambda表达式可以用来声明_lambda表达式可以用来创建包含多个表达式的匿名函数...

    [单选题]下面程序中语句print(i*j)一共执行了____次. for i in range(5): for j in range(2,5): print(i*j) [填空题]_____是目前比较 ...

  9. 已知一个字典变量stu_ infors,包含n个学生信息,每个学生信息,即字典变量stu_ infors每个元素的值为“学号:课程成绩”。现编写-个程序实现以下功能: (1)创建包含n个学生信息的字

    1.已知一个字典变量stu_ infors,包含n个学生信息,每个学生信息,即字典变量stu_ infors每个元素的值为"学号:课程成绩".现编写-个程序实现以下功能: (1)创 ...

最新文章

  1. Python入门100题 | 第029题
  2. arcgis两点之间连线_ArcGIS中实现一种流向地图的方法
  3. Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since
  4. HDU 6071 Lazy Running(同余最短路的应用)
  5. c语言i++和++i程序_使用C ++程序从链接列表中消除重复项
  6. 温昱:架构实践全景图
  7. 减少浏览器兼容性问题
  8. 9个元素换6次达到排序序列_面试题精选(排序算法类)c/c++版 上篇
  9. Google C++测试框架系列高级篇:第一章 更多关于断言的知识
  10. 基于Javaweb校园二手交易平台源码及截图
  11. SQL 日期交差判断
  12. 特殊符号 mysql_mysql 特殊字符
  13. web学习(3)--别踩白块儿(HTML版)(web入门)
  14. 火狐浏览器批量保存网页图片
  15. 【语义分割系列:八】Segmentation 数据集 介绍下载论文
  16. 极限中0除以常数_酶动力学中的一些常数简介
  17. 免费制作在线网站教程
  18. 怎么保证自动化脚本没有问题_质量保证将使设计变得自动化
  19. 雷电模拟总是显示android启动,雷电模拟器启动失败如何解决?启动失败解决方法图文分享...
  20. 卫星环绕地球c语言编程,动画技术——卫星环绕地球

热门文章

  1. Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to
  2. selenium 不同版本Driver
  3. Python学习笔记3——三大结构:顺序,分支,循环3
  4. VUE的组件DEMO
  5. 2022-2028年中国B2C电子商务市场投资分析及前景预测报告
  6. 前端页面——Cookie与Session有什么区别
  7. 探究rh6上mysql5.6的主从、半同步、GTID多线程、SSL认证主从复制
  8. LoadRunner中log的使用总结
  9. 中山大学计算机学院运动会,喜讯!我院获2019中大校运会教工组团体第二名
  10. java记事本环境变量_java环境变量配置以及用记事本写程序