一般来说,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++踩过的坑的更多相关文章

  1. 记一次 Spring 事务配置踩坑记

    记一次 Spring 事务配置踩坑记 问题描述:(SpringBoot + MyBatisPlus) 业务逻辑伪代码如下.理论上,插入数据 t1 后,xxService.getXxx() 方法的查询条 ...

  2. 项目中踩过的坑之-sessionStorage

    总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...

  3. 【转载】Fragment 全解析(1):那些年踩过的坑

    http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...

  4. 《C++之那些年踩过的坑(二)》

    C++之那些年踩过的坑(二) 作者:刘俊延(Alinshans) 本系列文章针对我在写C++代码的过程中,尤其是做自己的项目时,踩过的各种坑.以此作为给自己的警惕. 今天讲一个小点,虽然小,但如果没有 ...

  5. 使用vue开发项目需要注意的问题和可能踩到的坑

    最近,在公司给一些刚刚使用vue进行开发的同学做了一次分享, 其中包括一些vue开发中需要注意的点, 以及一些可能会踩到的坑.具体内容如下: 一.生命钩子使用需要注意的地方 1.beforeCreat ...

  6. 记一次SpringBoot 开发中所遇到的坑和解决方法

    记一次SpringBoot 开发中所遇到的坑和解决方法 mybatis返回Integer为0,自动转型出现空指针异常 当我们使用Integer去接受数据库中表的数据,如果返回的数据中为0,那么Inte ...

  7. wrk 使用记录及踩过的坑

    wrk是什么?https://github.com/wg/wrk wrk 是一个非常小巧高效的开源性能测试工具,支持lua脚本来创建复杂的测试场景.wrk 的一个很好的特性就是能用很少的线程压出很大的 ...

  8. [问题解决]RedHat7更换CentOS7的yum源时踩过的坑

    更换yum源的流程 查看当前yum程序 $ rpm -qa|grep yum 这里推荐将其结果截屏或拷贝出来,以免后面报错修复. 删除原有yum源 $ rpm -aq | grep yum|xargs ...

  9. 小程序——微信小程序初学踩过的坑

    微信小程序初学踩过的坑 一.前言     最近因为某些需要和个人兴趣打算开发一下微信小程序,经过在官方网站上的基本了解,我大体知道了微信小程序开发的大致过程,其实最本质的就是MVVM,借用了很多模式上 ...

随机推荐

  1. Thinkphp5.0第三篇

    批量插入数据 //新增一条数据的方法 public function add() { /*$user =new UserModel(); $user->id=1; $user->name= ...

  2. 去掉文件 BOM 头

    什么是 BOM? BOM 全称是 Byte Order Mark,意思是字节顺序标记.常用来当作标示文件是以 UTF-8.UTF-16 或者 UTF-32 编码的标记. 去除 BOM 头方法 vim ...

  3. SpringBootSecurity学习(20)前后端分离版之OAuth2.0刷新token

    刷新token 前面的例子和配置都是从头开始申请授权码和令牌,现在来看一下如何根据获取令牌时,回参中的 refresh_token 来刷新令牌.现在在项目中配置的是内存模式的默认用户名密码,第一步先改 ...

  4. 【主动学习】Variational Adversarial Active Learning

    本文记录了博主阅读ICCV2019一篇关于主动学习论文的笔记,第一篇博客,以后持续更新哈哈 论文题目:<Variational AdVersarial Active Learning> 原 ...

  5. pinpoint1.8.5安装及使用指南

    简介 pinpoint是开源在github上的一款APM监控工具,它是用Java编写的,用于大规模分布式系统监控.它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的. 各大APM ...

  6. pycharm导入自己写的包的时候,不能识别模块的解决办法

    今天用写selenium脚本的时候导入自己统计目录下的模块时,出错,明明存在但是报错说模块不存在,找了半天终于找到解决方案,顺便记录一下吧 pycharm不会将当前文件目录自动加入自己的sourse_ ...

  7. 什么是回流(重排 reflow)?什么是重绘(repaint)?如何减少回流、重绘?

    什么是回流(重排 reflow)? 回流(重排 reflow):对DOM树进行渲染,只要修改DOM或修改元素的形状大小,就会触发reflow,reflow的时候,浏览器会使已渲染好受到影响的部分失效, ...

  8. B-概率论-贝叶斯决策

    目录 贝叶斯决策 一.贝叶斯决策理论 二.贝叶斯公式 2.1 从条件概率公式推导贝叶斯公式 2.2 从全概率公式推导贝叶斯公式 三.贝叶斯公式应用 更新.更全的<机器学习>的更新网站,更有 ...

  9. linux上安装LAMP笔记

    B哥最近在参加比赛,需要把一个php项目部署到服务器上,故此在linux上安装LAMP环境,用于部署项目,第一次安装,做点儿笔记记录一下. 安装条件: Redhat或者CentOS linux环境已装 ...

  10. 数据结构(java)

    数据结构1.什么是数据结构?数据结构有哪些? 数据结构是指数据在内存中存放的机制. 不同的数据结构在数据的查询,增删该的情况下性能是不一样的. 数据结构是可以模拟业务场景. 常见的数据结构有:栈,队列 ...