记一次C#调用C++踩过的坑
一般来说,C#调用C++生产的dll,如下:
C++的项目要设置为"导出dll的项目",而且导出的函数,一般为:
extern "C" __declspec(dllexport) int Convrnx(int format, rnxopt_t opt, char *file, char **ofile)
{
....
}
弄出一个C++的dll后,放到C#的生成目录下,也就是和.exe放在一起;
而C#,则要:
[DllImport("RtklibHelper.dll", EntryPoint = "Convrnx", CallingConvention = CallingConvention.Cdecl)]
        public static extern int Convrnx(int format, rnxopt_t opt, string file, string[] ofile)
{
....
}
坑一:C#的类型,怎么和C++的类型对应起来(如例子:string对应*char,string[]对应char**)
解一:有一款神奇的工具,名为:CLRInsideOut,微软的手笔:

比如说:C++ 中的结构体 rnxopt_t ,其中又嵌套结构体snrmask_t等等,只需要将其用txt自上而下整理好(C++的声明写在前后很讲究),右边直接为C#代码;
坑二:在本机C#调用C++一切都正常,放到别的机器就有:找不到指定的模块。 (异常来自 HRESULT:0x8007007E) ,各种搜索尝试都不行(包括尝试安装Vs c++环境)。
程序员的直觉:肯定是C++产出的dll,调用了系统的dll,而别的电脑又不一定有。
思路:找出这个dll,到底调用了什么东西
解二:又是使用微软的工具:


找到了,就是这些dll;
程序员的直觉:这个东西,绝逼是在c:\window下的,搜索一下,发现:WINMM.dll在两个文件夹都有,到底是哪个?
解:只需要到别的电脑搜一下,那个缺少就拷贝那个
全部揪出来:

然后放到和exe相同的目录下;(按照C++ dll的习惯,动态库总会在当前目录和系统目录中找,所以没必要一个个放到目标电脑对应的文件夹中)
记一次C#调用C++踩过的坑的更多相关文章
- 记一次 Spring 事务配置踩坑记
		记一次 Spring 事务配置踩坑记 问题描述:(SpringBoot + MyBatisPlus) 业务逻辑伪代码如下.理论上,插入数据 t1 后,xxService.getXxx() 方法的查询条 ... 
- 项目中踩过的坑之-sessionStorage
		总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ... 
- 【转载】Fragment 全解析(1):那些年踩过的坑
		http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ... 
- 《C++之那些年踩过的坑(二)》
		C++之那些年踩过的坑(二) 作者:刘俊延(Alinshans) 本系列文章针对我在写C++代码的过程中,尤其是做自己的项目时,踩过的各种坑.以此作为给自己的警惕. 今天讲一个小点,虽然小,但如果没有 ... 
- 使用vue开发项目需要注意的问题和可能踩到的坑
		最近,在公司给一些刚刚使用vue进行开发的同学做了一次分享, 其中包括一些vue开发中需要注意的点, 以及一些可能会踩到的坑.具体内容如下: 一.生命钩子使用需要注意的地方 1.beforeCreat ... 
- 记一次SpringBoot 开发中所遇到的坑和解决方法
		记一次SpringBoot 开发中所遇到的坑和解决方法 mybatis返回Integer为0,自动转型出现空指针异常 当我们使用Integer去接受数据库中表的数据,如果返回的数据中为0,那么Inte ... 
- wrk 使用记录及踩过的坑
		wrk是什么?https://github.com/wg/wrk wrk 是一个非常小巧高效的开源性能测试工具,支持lua脚本来创建复杂的测试场景.wrk 的一个很好的特性就是能用很少的线程压出很大的 ... 
- [问题解决]RedHat7更换CentOS7的yum源时踩过的坑
		更换yum源的流程 查看当前yum程序 $ rpm -qa|grep yum 这里推荐将其结果截屏或拷贝出来,以免后面报错修复. 删除原有yum源 $ rpm -aq | grep yum|xargs ... 
- 小程序——微信小程序初学踩过的坑
		微信小程序初学踩过的坑 一.前言 最近因为某些需要和个人兴趣打算开发一下微信小程序,经过在官方网站上的基本了解,我大体知道了微信小程序开发的大致过程,其实最本质的就是MVVM,借用了很多模式上 ... 
随机推荐
- git远程分支不显示问题解决
			因为项目太大,然后直接git clone拉不下来代码 会报error: RPC failed; HTTP 504 curl 22 The requested URL returned error: 5 ... 
- wsgi相关的
			目录 web 本质 http协议 请求方式 响应状态码 请求与响应文本格式 目录 web 本质 本质就是浏览器和服务器进行通信, http协议 也叫超文本传输协议(英文:HyperText T ... 
- MIPI CSI2-TX接口基于FPGA实现
			MIPI CSI2-TX用途: 跟海思的3559A芯片进行图像数据传输: MIPI CSI2-TX接口特性: xilinx 7系列芯片最大支持1.25Gbps: 最大支持lanes数量为4: 支持的图 ... 
- Android 列表(ListView、RecyclerView)不断刷新最佳实践
			本文微信公众号「AndroidTraveler」首发. 背景 在 Android 列表开发过程中,有时候我们的 Item 会有一些组件,比如倒计时.这类组件要求不断刷新,这个时候由于列表复用的机制,因 ... 
- python犯傻之题目解答思路比较与反思
			1.题目: 企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%: 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%: 20万 ... 
- 宝塔面板6.x版本前台存储XSS+后台CSRF组合拳Getshell
			对于宝塔漏洞复现和练习 0×00 什么是宝塔面板 宝塔面板是一款使用方便,功能强大且终身免费的服务器管理软件,支持Linux 与Windows 系统.一键配置:LAMP / LNMP ,网站,数据库 ... 
- hydra暴力破解
			hydra,是一个非常好用的暴力破解工具,而且名字也很cool. 下面是官网上的介绍: AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, ... 
- Cocos2d-x 学习笔记(19) Control Invocation
			[Cocos2d-x 学习笔记 目录链接] 1. 简介 control为其子类提供了touch回调函数,当子类触发EventType相关事件时,会调用相关的回调函数. control对象接收到的事件类 ... 
- Halcon一日一练:获取程序运行时间
			很多时候,我们需要知道每个函数的运算周期,以提高程序的运行效率.知道运行时间对于图像算法处理很重要 Halcon提供相关的算子,我们先来看代码: **获取图像处理时间 read_image(Image ... 
- eclipse 中配置maven环境
			选择 菜单栏 window -preferences-maven- installations 点击add 添加自己的maven 库 配置 setting 第一个为全局配置 第二个为用户配置可以覆盖全 ... 
