先讲下为什么要在xp系统上运行opencv生成的C++动态库,原因是我做了一个图像检测项目,使用C#编写的,C#里有个opencvsharp图像处理包,对于C#程序员调用在舒服不过了,但是!客户比较守旧,非要项目支持XP系统,我想那就放XP上跑呗,跑了才发现总是报错

排查了好久才知道XP不支持较高版本的opencv,更别提opencvsharp了。网上有说XP支持opencv3.0,于是就从网上down下来,编译成库,写了个demo调用,(刚开始我用的是vs2017,环境配置详细可看这位仁兄的https://blog.csdn.net/shitangdejiaozi/article/details/54139438 属性配置里把VC++目录中的包含目录和库目录填上opencv3.0的include和lib,链接器的输入中的附加依赖项把相关的lib库都填上了)把demo放到XP上,还是报错,在XP用dependency工具查看动态库,发现一大堆系统动态库找不到,这里省略10000字,历经坎坷,发现要把配置属性常规里的平台工具集选成Visual Studio 2017 - Windows XP (v141_xp),还要把C/C++代码生成里的运行库选择多线程(/MT),这样好了,demo终于可以在XP上跑起来了,我想这下应该没什么难的了,只需要把opencvsharp的接口改成对应opencv的,估计参数啥的都不用变。

事实证明我还是太年轻,在动态库里改了之后调用,却怎么都出不来调用opencvsharp的效果,郁闷啊,难道都是opencv还有啥多大区别?好吧,最坑的就是这两位了adaptiveThreshold,findContours,先说adaptiveThreshold,这个函数作用是自适应二值化,最后一个参数c之前用opencvsharp的时候调整了好长时间,终于调出最佳效果了,然后用opencv不好使了,各种试啊,最后实在没招了,调成负的试试,我去,居然好了,这什么逻辑。。。管他呢,效果出来就行,来不及开心啊,因为程序跑着跑着就退出了,啥错也没报啊,怎么办一行一行注释找呗,最后定位在这两个函数上,有你没我,不能共存,我的心是崩溃且处在麻木的边缘,这怎么搞,然后网上又一通搜,没啥帮助,后来想到opencv3.0里x86下面对应的vc12,然后我用的是vs2017,是不是不对应?网上一查,果然,cv12对应vs2013........怎么办?下呗,又折腾了几个小时把vs2013给装上了,装好之后,赶紧操作一通,好了!可以正常调用了!如释重负,这个周末可以好好过了,感恩!对了,vs2013的平台工具集要选择这个Visual Studio 2013 - Windows XP (v120_xp),还有C#项目的.NET工具集也不能太高。

关于C++编写动态库:新建项目,选择win32控制台应用程序,然后选择DLL,在生成的stdafx中添加如下代码:

#include <opencv2\opencv.hpp>
#include <opencv\cv.hpp>
#include <opencv2\highgui.hpp>

添加对应项目名的.h,在.h文件中添加供外界调用的接口

#ifdef OPENCVTEST_EXPORTS
#define OPENCVTEST_API extern "C" __declspec(dllimport)
#else
#define OPENCVTEST_API extern "C" __declspec(dllexport)
#endif

接口前要添加OPENCVTEST_API,在cpp中写接口的实现。

然后就是C#中的调用了

using System.Runtime.InteropServices;

[DllImport("opencvdll.dll", CallingConvention = CallingConvention.Cdecl)]//为了解决问题托管调试助手 "PInvokeStackImbalance":的调用导致堆栈不对称
public static extern void DrawCircleOnPicture(String filename);

这里貌似要成对出现,不然接口找不到定义。

好了,这里记录我的坎坷,希望也能帮到你

关于如何在XP系统上运行opencv生成的C++动态库相关推荐

  1. 在XP系统上运行win7 sp1 ADO程序 800401f3 GetLastError 14000 Error_sxs_section_not_found

    http://m.blog.csdn.net/blog/u012782049/42023715# [转]在XP系统上运行ADO程序. 2014-12-19阅读160 评论0 出现的问题:在WIN7下开 ...

  2. VS2017应用在XP系统上运行

    本人之前未用过VS和C++,工作需要,最近用VS2017写了一个MFC应用,我用win10开发的,但在XP上无法运行,各种报错,网上各种找解决方法,但都无法解决,无意中发现vs2017有对XP的支持, ...

  3. linux如何运行安卓程序,如何在Android系统上运行C语言的程序

    问题阐述: 本人使用mini6410开发了一个sqlite数据库的程序,在mini6410的linux系统下已经能够成功运行了.因为Android使用的也是linux内核,所以我想当然的认为按照同样的 ...

  4. 如何在ESXi5.1上运行一个虚拟的ESXi虚拟机并且在这个虚拟的ESXi虚拟机里运行64位的系统?...

    如何在ESXi5.1上运行一个虚拟的ESXi虚拟机并且在这个虚拟的ESXi虚拟机里运行64位的系统? 这个虚拟的ESXi虚拟机也叫作嵌入式ESXi,目前这个功能是一个体验版,仅用于测试或者教学演示用, ...

  5. opencv 安装_如何在 CentOS 8 上安装 OpenCV

    本文最先发表在: 如何在 CentOS 8 上安装 OpenCV​www.itcoder.tech OpenCV(Open Source Computer Vision Library) 是一个开源的 ...

  6. OpenCV Java入门一 在MAC系统上安装OpenCV

    OpenCV网上讲的一个都不对,要么卡死电脑,要么训练模型写死,要么都只是显示显示人脸就说入门了.没有一个从安装.使用.驱动摄像头.训练模型.辩别人脸的全过程.最夸张的是连怎么安装个OpenCV的资料 ...

  7. 如何在windows系统上安装ubuntu双系统

    如何在windows系统上安装ubuntu双系统 一.准备工具: 1.U盘 2.软碟通:UltraISO,EasyBCD 3.系统镜像.下载网址1:https://www.ubuntu.com/dow ...

  8. Redis进阶实践之二如何在Linux系统上安装安装Redis

    2019独角兽企业重金招聘Python工程师标准>>> Redis进阶实践之二如何在Linux系统上安装安装Redis 一.引言 上一篇文章写了"如何安装VMware Pr ...

  9. 如何在Linux系统上自动执行任务

    How to automate tasks on a Linux system 如何在Linux系统上自动执行任务 https://www.linux.org/threads/how-to-autom ...

最新文章

  1. 巨细!Python爬虫详解(建议收藏)
  2. 普通用户下变成-bash-3.2$的解决方法
  3. Win2003用NAT实现ADSL共享与×××服务器
  4. 使用分页插件的后悔药(二)
  5. oracle表数据转换成sql,ORACLE8I转换数据到SQLSERVER数据库
  6. 【Network Security!】关于DDOS攻击的现状分析与探索
  7. MAVEN学习笔记-maven的获取和安装
  8. Php中方法作用域,PHP 函数(下):匿名函数和作用域
  9. Hadoop/HIVE错误解决方案汇总
  10. 第58课 百钱买百鸡(完整) 3.完善程序 (《小学生C++趣味编程》)
  11. webpack打包流程_了不起的 Webpack 构建流程学习指南
  12. UNIX系统命令大全
  13. 三种交换方式:电路交换、分组交换、报文交换
  14. 艺术范,技术芯——读达芬奇有感
  15. 「HEOI 2014」南园满地堆轻絮
  16. 网易邮箱好用还是TOM邮箱好用?企业邮箱可绑定微信吗?
  17. 2019 SIGGRAPH paper
  18. COCOS CREATOR(TS)相对坐标转世界坐标
  19. 手机消息同步+android屏幕镜像=电脑微信 for linux
  20. 自定义Spark累加器

热门文章

  1. iOS-OC-3DES加密和解密
  2. python中idx+=1_在Python中为apos;循环访问索引 Dovov编程网
  3. import和export
  4. display:none和visibility:hidden的区别
  5. MySQL执行查询语句时出现停滞状态,出现Waiting for table metadata lock的问题
  6. 华为ensp 401 错误解决方案
  7. 什么是字节码,采用字节码的好处是什么?
  8. mysql端口号3306被占用_使用pandas将excel表格数据导入到mysql中
  9. 零基础web前端学习路线【全新web前端入门视频教程】
  10. 计算机毕业设计php+vue基于微信小程序的叽喳音乐播放小程序